58 votes

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

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

82voto

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é.

45voto

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)

0voto

RANA DINESH Points 47

En length() fonction :

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

0voto

sqldoug Points 101

Pas une réponse mais une observation : J'exécute la v5.30.2 construite pour darwin-2level, et j'ai remarqué que si je ne chomp l'entrée d'abord (comme avec stdin), puis calcule la longueur, les length d'un seul caractère n'est pas 1, mais 2.

N'oubliez pas les sauts de ligne et les autres caractères cachés qui peuvent jouer un rôle.

Et j'aimerais bien trouver le post d'Abigail, mais hélas il semble avoir été consumé par l'éther.

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