Quel est l'équivalent en Perl de strlen()
?
Votre réponse serait meilleure si elle comportait un exemple.
Quel est l'équivalent en Perl de strlen()
?
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.
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.
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).
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.
@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.
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 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.