58 votes

Comment obtenir la longueur d'une chaîne de caractères en Perl ?

Quel est l'équivalent en Perl de strlen() ?

83voto

Paul Tomblin Points 83687

length($string)

perldoc -f length

   length EXPR
   length  Returns the length in characters of the value of EXPR.  If EXPR is
           omitted, returns length of $\_.  Note that this cannot be used on an
           entire array or hash to find out how many elements these have.  For
           that, use "scalar @array" and "scalar keys %hash" respectively.

           Note the characters: if the EXPR is in Unicode, you will get the num-
           ber of characters, not the number of bytes.  To get the length in
           bytes, use "do { use bytes; length(EXPR) }", see bytes.

26 votes

Votre réponse serait meilleure si elle comportait un exemple.

0 votes

Que se passe-t-il si la chaîne de caractères contient des zéros intégrés (par exemple, à la suite de la lecture d'une partie ou de la totalité d'un fichier fichier binaire en une chaîne de caractères) ? Le terme "longueur" peut ne pas être l'équivalent exact.

0 votes

@PeterMortensen la question était pour un équivalent à strlen qui s'arrête également sur un zéro incorporé.

47voto

Yanick Points 872

Bien que 'length()' soit la réponse correcte qui devrait être utilisée dans tout code sain, L'horreur de la longueur d'Abigail doit être mentionnée, ne serait-ce que pour l'histoire de Perl.

En gros, l'astuce consiste à utiliser la valeur de retour de l'opérateur de translittération fourre-tout :

print "foo" =~ y===c;   # prints 3

y///c remplace tous les caractères par eux-mêmes (grâce à l'option complémentaire 'c'), et renvoie le nombre de caractères remplacés (donc, en fait, la longueur de la chaîne).

1 votes

Les modes de comptage de y ne modifient pas réellement la chaîne de caractères, de sorte qu'ils fonctionnent bien même sur des valeurs en lecture seule.

1 votes

@Yanick Je n'arrive pas à lire le lien de "Abigail's length horror" donc pouvez-vous expliquer cela s'il vous plaît ? Je sais que ce sujet est vieux, mais il y a des nouveaux venus comme moi qui sont intéressés.

1 votes

@bashophil a tardivement changé le lien pour un lien archive.org afin d'éviter la connexion par texte social.

41voto

JDrago Points 1479
length($string)

1voto

RANA DINESH Points 47

En length() fonction :

$string ='String Name';
$size=length($string);

0voto

pslessard Points 63

Vous ne devriez pas utiliser ceci, puisque length($string) est plus simple et plus lisible, mais je suis tombé sur certains d'entre eux en regardant du code et j'étais confus, donc au cas où quelqu'un d'autre le ferait, ceux-ci obtiennent aussi la longueur d'une chaîne :

my $length = map $_, $str =~ /(.)/gs;
my $length = () = $str =~ /(.)/gs;
my $length = split '', $str;

Les deux premières fonctionnent en utilisant le drapeau global pour faire correspondre chaque caractère de la chaîne, puis en utilisant la liste retournée des correspondances dans un contexte scalaire pour obtenir le nombre de caractères. La troisième fonctionne de la même manière en séparant chaque caractère au lieu d'effectuer une correspondance regex et en utilisant la liste résultante dans un contexte scalaire.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X