Fonction length() en Perl

Dans le langage de programmation Perl, il ya une fonction intégrée length(). Cette fonction retourne la longueur de la chaîne, qui est transmis par l'argument de cette fonction.

Voici un exemple:

▶ Run
#!/usr/bin/perl

print( length('Hello') );

Ce programme affiche le nombre de 5. Dans la barre de 'Hello' les cinq caractères.

Les arguments

my $length = length($str);

Si la fonction length() envoyer un seul argument, la fonction sera de travailler avec lui.

Si vous ne transmettre aucun argument, la fonction va travailler avec la variable $_. Voici un exemple (le programme affiche le nombre de 4):

▶ Run
#!/usr/bin/perl

$_ = 'asdf';

print( length() );

Si la fonction length() de transmettre plus d'un argument, ce serait une erreur:

Too many arguments for length at script.pl line 3, near "'a') "
Execution of script.pl aborted due to compilation errors.

La valeur de retour

La fonction length() renvoie un undef, soit un nombre entier positif. La fonction renvoie undef seulement si elle remis undef.

Voici trois programmes dans chacune d'entre eux length() renvoie undef. Ils sont tous égaux.

▶ Run
#!/usr/bin/perl

use Data::Dumper;

warn Dumper length(undef);
▶ Run
#!/usr/bin/perl

use Data::Dumper;

$_ = undef;

warn Dumper length();
▶ Run
#!/usr/bin/perl

use Data::Dumper;

warn Dumper length();

Unicode

La fonction length() renvoie le nombre de caractères dans une chaîne, et non pas le nombre d'octets, mais besoin pour que la ligne soit avec un drapeau qui indique que dans une chaîne Unicode. Un tel drapeau s'affiche automatiquement et les lignes décrites dans le code si dans le programme il ya use utf8;. Voici un programme qui renvoie le nombre de 7 est un nombre correct de caractères de cette ligne:

▶ Run
#!/usr/bin/perl

use utf8;

print( length('АБВГДЕЁ') );

Mais si le programme n'a pas use utf8;, alors les lignes définies dans le programme de sont considérés comme une séquence d'octets et de la fonction length() renvoie le nombre d'octets. Voici un programme qui utilise la même ligne que le précédent, mais ce programme affiche le nombre de 14 (dans la barre de 7 lettres, chaque lettre prend deux octets):

▶ Run
#!/usr/bin/perl

print( length('АБВГДЕЁ') );

Exemples

Voici un programme qui montre quelques exemples des travaux de la fonction length():

▶ Run
#!/usr/bin/perl

use feature qw(say);

my $arr = [1, 2, 3];
my $hash = { a => 1 };
my $sub = sub { return 1 };

foreach my $var ('12', 12, 0xff, 0b1000, 'S', 'String', $arr, $hash, $sub ) {
    say $var . ' - ' . length($var);
}

Le résultat de ce programme:

12 - 2
12 - 2
255 - 3
8 - 1
S - 1
String - 6
ARRAY(0x561a04e48578) - 21
HASH(0x561a04e60cf8) - 20
CODE(0x561a04e61370) - 20

La fonction length() retourne la même valeur pour la ligne '12' et pour le nombre de 12 (nombre de 2). Un nombre hexadécimal 0xff est 255 en décimal de numération et length() renvoie le nombre de 3. Exactement, et que le nombre enregistré dans le système binaire.

La fonction length() ne peut pas être utilisé pour compter le nombre d'éléments dans le tableau ou le hachage. Alors comme il est décrit sur les pages:

Pour ARRAYREF et HASHREF fonction length() renvoie le nombre de caractères dans les lignes de vue 'ARRAY(0x561a04e48578)'.

La documentation officielle

Voici la sortie de la commande perldoc -f length:

       length EXPR
       length  Returns the length in characters of the value of EXPR.  If EXPR
               is omitted, returns the length of $_.  If EXPR is undefined,
               returns "undef".

               This function 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.

               Like all Perl character operations, length() normally deals in
               logical characters, not physical bytes.  For how many bytes a
               string encoded as UTF-8 would take up, use
               "length(Encode::encode_utf8(EXPR))" (you'll have to "use
               Encode" first).  See Encode and perlunicode.

Thèmes connexes

Autres articles