[Perl] strlen

Résolu/Fermé
PeterPeterPeter Messages postés 202 Date d'inscription jeudi 17 juillet 2008 Statut Membre Dernière intervention 22 juin 2010 - 18 juil. 2008 à 15:57
PeterPeterPeter Messages postés 202 Date d'inscription jeudi 17 juillet 2008 Statut Membre Dernière intervention 22 juin 2010 - 19 juil. 2008 à 14:04
Bonjour,

Je voulais me coder un petit strlen après avoir fais qqes débuts de tuto en perl mais apparament
je n'arrive pas à me déplacer dans une chaine de caractère !

En C :
int my_strlen(char *str)
{
  int i;

  i = 0;
  while(str[i]) i++;
  return(i);
}


J'ai essayé comme cela pour du perl :

sub mystrlen {
    my $str = @_[0];
    my $i = 0;

    while ($str[$i]) $i++;
    return ($i);
}


Mais apparament ce n'est pas possible de se déplacer comme en C dans une chaine de caractère.

ps : oui je sais que la fonction length() existe en perl c'est juste pour mieux comprendre comment
cela se passe en perl.

Merci !

12 réponses

lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
19 juil. 2008 à 08:50
Salut,

c'est un peu normal, puisque par rapport à C où une chaîne de caractères est un tableau de caractères (donc tu peux parcourir les éléments de tableau en incrémentant i par exemple), en Perl une chaîne de caractères c'est une donnée singulière appelé aussi scalar.


pour faire comme tu fait en C, tu dois d'abord éclater la chaîne dans un tableau et ensuite sur le tableau tu peux faire le même algorithme qu'en C

voici un exemple
#!/usr/bin/perl
#
my $chaine="Mais apparament ce n'est pas possible de se déplacer comme en C dans une chaine de caractère.";

#avec boucle comme on fait en C - v2
sub strlen_C {
        my $i;
        my @s = split '',$_[0];;
        while(@s){
                ++$i;
                shift @s;
        }
        return $i;
}
my $i = strlen_C($chaine);
printf "1. Longueur de \$chaine = $i\n";

# avec les expressions régulières
sub strlen_RE {
        my @i = $_[0]=~/(.)/g;
        return scalar @i;
}
my $i = strlen_C($chaine);
printf "2. Longueur de \$chaine = $i\n";

# pas vraiment besoin d'une fonction personnalisée
print "3. Longueur de \$chaine = ",
      scalar(split '',$chaine),"\n";
__END__
L'exécution
lami20j@debian:~/trash$ perl strlen.pl
1. Longueur de $chaine = 93
2. Longueur de $chaine = 93
3. Longueur de $chaine = 93
0
PeterPeterPeter Messages postés 202 Date d'inscription jeudi 17 juillet 2008 Statut Membre Dernière intervention 22 juin 2010 30
19 juil. 2008 à 12:22
Merci beaucoup ça m'aide à un peu mieux comprendre la logique de ce langage magnifique qu'est le perl !

Sinon, vu que tu as l'air plutôt bon en perl, aurais-tu de bons sites à me conseiller ?Car personellement je n'ai pas trouvé un tutoriel qui me convient vraiment car ils sont soit trop vieux, soit trop axé web / regex.

Je met comme résolu tout de même vu que j'ai ma réponse principale !
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
19 juil. 2008 à 12:32
Re,

à part enstimac qui a la traduction en français de la documentation Perl, personnellement j'ai acheté ça :

Introduction à Perl
Programmation en Perl
Perl en action
De l'art de programmer en Perl
c'est cher, mais ça vaut le coup ;-)

0
PeterPeterPeter Messages postés 202 Date d'inscription jeudi 17 juillet 2008 Statut Membre Dernière intervention 22 juin 2010 30
19 juil. 2008 à 13:12
Que du O'Reilly, tu es friand de qualité on dirai !

Je vais surement me commander "introduction à Perl" !

Merci encore de ton aide.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
19 juil. 2008 à 13:14
Re,

Si tu te débrouilles en anglais, tu trouves des livres (en lecture seule) ici https://docstore.mik.ua/orelly/perl/
0
PeterPeterPeter Messages postés 202 Date d'inscription jeudi 17 juillet 2008 Statut Membre Dernière intervention 22 juin 2010 30
19 juil. 2008 à 13:30
C'est exactement le genre de site que je cherchais, un site qui traite le perle de A à Z et surtout la partie networking, ça va être un régal, par contre je ne trouve pas de site de vente qui dispose de "Introduction à Perl", j'espère pouvoir le commander directement en librairie, j'irai voir pendant la semaine !

Merci merci !J'ai de quoi m'occuper pour un bon bout de temps là !
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
19 juil. 2008 à 13:34
Re,

je vais te donner aussi une mauvaise nouvelle O'Reilly France : fermeture définitive
0
PeterPeterPeter Messages postés 202 Date d'inscription jeudi 17 juillet 2008 Statut Membre Dernière intervention 22 juin 2010 30
19 juil. 2008 à 13:40
Je n'étais pas du tout au courant, c'est vraiment affligeant d'apprendre cela, enfin je me débrouillerai pour trouver un de ces bouquins.
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
19 juil. 2008 à 13:51
Salut,

Introduction à Perl, est juste un survol sur le Langage (je le trouve très pratique ;-)
Programmation en Perl c'est carrément la Bible ;-)

Tiens aussi ce lien, avec le code source (non expliqué) de Perl en Action
0
PeterPeterPeter Messages postés 202 Date d'inscription jeudi 17 juillet 2008 Statut Membre Dernière intervention 22 juin 2010 30
19 juil. 2008 à 13:55
Enorme ... faut que t'arrêtes là, sinon je ne vais plus faire autre chose que du perl tant que je n'ai pas tout parcouru !
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
19 juil. 2008 à 13:59
Re,

Pour ne pas oublier CPAN (Comprehensive Perl Archive Network) où tu trouveras plein des modules, scripts ainsi que le code source de Perl

Et j'arrête ;-))
0
PeterPeterPeter Messages postés 202 Date d'inscription jeudi 17 juillet 2008 Statut Membre Dernière intervention 22 juin 2010 30
19 juil. 2008 à 14:04
Merci, merci, merci pour ton aide plus que précieuse !

Je pense que j'ai de la documentation pour ... hmmm ... beaucoup de temps là :)
0