[Perl] strlen

Résolu
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 !
Configuration: Windows 2000
Firefox 3.0.1

12 réponses

  • Votes
  • Date
  • Date décroissante
  1. Merci, merci, merci pour ton aide plus que précieuse !

    Je pense que j'ai de la documentation pour ... hmmm ... beaucoup de temps là :)
    1. 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 !
      1. Modérateur
        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
        1. 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.
          1. 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à !
            1. Que du O'Reilly, tu es friand de qualité on dirai !

              Je vais surement me commander "introduction à Perl" !

              Merci encore de ton aide.
              1. Modérateur
                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 ;-)

                1. 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 !
                  1. Modérateur
                    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