Funzione length() in Perl

Nel linguaggio di programmazione Perl ci sono built-in funzione di length(). Questa funzione restituisce la lunghezza della stringa, che è trasmessa argomento a questa funzione.

Ecco un esempio:

▶ Run
#!/usr/bin/perl

print( length('Hello') );

Questo programma visualizza il numero di 5. Nella barra di 'Hello' cinque caratteri.

Argomenti

my $length = length($str);

Se la funzione length() passare un solo argomento, la funzione di lavorare con lui.

Se non trasmettere alcun argomento, la funzione sarà lavorare con una variabile $_. Ecco un esempio (il programma visualizzerà il numero di 4):

▶ Run
#!/usr/bin/perl

$_ = 'asdf';

print( length() );

Se la funzione length() di trasferire più di un argomento, quello è un errore:

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

Il valore restituito

Funzione length() restituisce undef, o un numero intero positivo. La funzione restituisce undef solo se in esso consegnato undef.

Ecco tre programmi, in ogni loro length() restituisce undef. Tutti sono uguali.

▶ 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

Funzione length() restituisce il numero di caratteri in una stringa e non un numero di byte, ma necessario per la riga è stata con un flag che indica che la riga si trova Unicode. Così la bandiera appare automaticamente e righe descritte nel codice se nel programma ci sono use utf8;. Ecco un programma che restituisce il numero di 7 — e ' corretto il numero caratteri in questa riga:

▶ Run
#!/usr/bin/perl

use utf8;

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

Ma se nel programma non c'è use utf8;, allora le righe definiti nel programma sono considerati una sequenza di byte e la funzione length() restituisce il numero di byte. Ecco il programma che utilizza la stessa riga dell'esempio precedente, ma questo programma visualizzerà il numero di 14 (nella barra 7 lettere, ogni lettera occupa due byte):

▶ Run
#!/usr/bin/perl

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

Esempi

Ecco il programma, che mostra alcuni esempi di funzione 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);
}

Il risultato del lavoro di questo programma:

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

Funzione length() restituisce lo stesso valore per riga '12' e per il numero di 12 (numero 2). Il numero esadecimale 0xff è 255 nel sistema decimale di numerazione e length() restituisce il numero di 3. Allo stesso modo funziona e il numero registrato nel sistema numerico binario.

Funzione length() non può essere usata per calcolare il numero di elementi in un array o хеше. Come è descritta nelle pagine:

Per ARRAYREF e HASHREF funzione length() restituisce il numero di caratteri nelle stringhe di tipo 'ARRAY(0x561a04e48578)'.

La documentazione ufficiale di

Ecco l'output 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.

Temi correlati

Altri articoli