La función de length() en Perl

En el lenguaje de programación Perl tiene integrada la función de length(). Esta función devuelve la longitud de la cadena, que se haya presentado el argumento de esta función.

He aquí un ejemplo:

▶ Run
#!/usr/bin/perl

print( length('Hello') );

Este programa mostrará en pantalla el número de 5. En la barra de 'Hello' cinco caracteres.

Los argumentos

my $length = length($str);

Si la función de length() enviar un argumento, entonces la función será trabajar con él.

Si no pasa ningún argumento, entonces la función será trabajar con la variable $_. He aquí un ejemplo (el programa mostrará el número de 4):

▶ Run
#!/usr/bin/perl

$_ = 'asdf';

print( length() );

Si la función de length() enviar más de un argumento, lo que se producirá un error:

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

El valor devuelto

La función de length() devuelve un undef, o un número entero positivo. La función devuelve undef sólo si le entregaron undef.

He aquí tres programas, en cada uno de ellos length() devuelve undef. Todos ellos tienen el mismo valor.

▶ 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 función de length() devuelve el número de caracteres en una línea, y no el número de bytes, pero es necesario para que la cadena estaba con la bandera que indica que se encuentra en la barra de Unicode. Esta bandera aparece de forma automática y las líneas descritas en el código, si en el programa hay use utf8;. Este es el programa que devuelve el número de 7 es la cantidad correcta de caracteres en esta línea:

▶ Run
#!/usr/bin/perl

use utf8;

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

Pero si en el programa no hay use utf8;, entonces la cadena definidos en el programa de se considera una secuencia de bytes y la función de length() devuelve el número de bytes. Este es el programa que utiliza la misma línea que en el ejemplo anterior, pero este programa muestra el número de 14 (en la barra de 7 letras, cada letra ocupa dos bytes):

▶ Run
#!/usr/bin/perl

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

Ejemplos

He aquí un programa que muestra unos ejemplos de trabajo de la función de 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);
}

El resultado del trabajo de este programa:

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

La función de length() devuelve el mismo valor de y para la cadena de '12' y para el número de 12 (número de 2). Un número hexadecimal 0xff es 255 en decimal de numeración y length() devuelve el número de 3. De la misma manera funciona y el número grabado en el sistema binario de numeración.

La función de length() no se puede utilizar para calcular el número de elementos en la matriz, o хеше. Entonces como se explica en las páginas:

Para ARRAYREF y HASHREF función length() devuelve el número de caracteres en las filas de la clase de 'ARRAY(0x561a04e48578)'.

La documentación oficial

He aquí el resultado del comando 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.

Temas relacionados

Otros articulos