A função length() em Perl

Na linguagem de programação Perl possui a função de length(). Esta função retorna o comprimento da linha, que é transmitida argumento essa função.

Aqui está um exemplo:

▶ Run
#!/usr/bin/perl

print( length('Hello') );

Este programa irá imprimir na tela o número de 5. Na barra de 'Hello' de cinco caracteres.

Argumentos

my $length = length($str);

Se a função length() de passar um argumento, a função será a de trabalhar com ele.

Se não passar nenhum argumento, a função irá trabalhar com a variável $_. Aqui está um exemplo (o programa apresenta o número de 4):

▶ Run
#!/usr/bin/perl

$_ = 'asdf';

print( length() );

Se a função length() de transmitir mais do que um argumento, então o erro será:

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

O valor de retorno

A função length() retorna ou undef, ou um número inteiro positivo. A função retorna undef só se entregou undef.

Aqui estão três programas, em cada um deles length() retorna undef. Todos são iguais.

▶ 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

A função length() retorna o número de caracteres em uma linha, e não a quantidade de bytes, mas para a linha foi com a bandeira, que indica que a linha está Unicode. Essa bandeira é exibida automaticamente e de linhas descritas no código se no programa de há use utf8;. Aqui está o programa, que retorna o número de 7 — é correto o número de personagens desta linha:

▶ Run
#!/usr/bin/perl

use utf8;

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

Mas se o programa não use utf8;, então o comando definido no programa são considerados como uma seqüência de bytes e a função length() retorna o número de bytes. Aqui está um programa que usa a mesma linha que o exemplo anterior, mas este programa mostrará na tela o número de 14 (em linha 7 letras, cada letra ocupa dois bytes):

▶ Run
#!/usr/bin/perl

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

Exemplos

Aqui está um programa que mostra alguns exemplos de trabalhos função 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);
}

O resultado da execução deste programa:

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

A função length() retorna o mesmo valor para a e para a cadeia '12' e para o número de 12 (o número de 2). Um número hexadecimal 0xff é 255 estão no sistema decimal de numeração e length() retorna o número de 3. Exatamente o mesmo funciona e o número que você anotou no sistema binário de numeração.

A função length() não pode ser usado para contar o número de elementos na matriz ou хеше. Então, como fazer descrito nas páginas:

Para ARRAYREF e HASHREF função length() retorna o número de caracteres em seqüências de tipos de 'ARRAY(0x561a04e48578)'.

A documentação oficial

Aqui está a saída do 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

Outros artigos