Funktion length() i Perl

I programmeringssproget Perl har en indbygget funktion length(). Denne funktion returnerer længden af strengen, som er gået argument til funktionen.

Her er et eksempel:

▶ Run
#!/usr/bin/perl

print( length('Hello') );

Dette program vil vise antallet 5. I overensstemmelse 'Hello' fem tegn.

Argumenter

my $length = length($str);

Hvis funktioner length() for at bestå en enkelt argument, vil funktionen virke på det.

Hvis du ikke kan passere ethvert argument, vil funktionen virke med standard variable $_. Her er et eksempel (programmet viser antallet 4):

▶ Run
#!/usr/bin/perl

$_ = 'asdf';

print( length() );

Hvis funktioner length() pass mere end ét argument, vil det fejl:

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

Return værdi

Funktion length() returnerer enten undefeller et positivt heltal. Funktionen returnerer undef kun, hvis det gav undef.

Her er tre programmer, som hver af dem length() returnerer undef. De er alle tilsvarende.

▶ 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

Funktion length() returnerer antallet af tegn i streng, ikke antallet af bytes, men det er nødvendigt, at rækken var med et flag, der siger, at strengen er Unicode. Dette flag vises automatisk, og strengene er beskrevet i koden, hvis programmet der er use utf8;. Her er et program, som returnerer antallet 7 er det korrekte antal tegn i denne streng:

▶ Run
#!/usr/bin/perl

use utf8;

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

Men hvis programmet ikke use utf8;, så er de strenge, der er defineret i programmet betragtes som en sekvens af bytes, og den funktion length() returnerer antallet af bytes. Her er et program, som bruger den samme streng som i det foregående eksempel, men dette program viser antallet 14 (i overensstemmelse 7 bogstaver, hvert bogstav er to bytes):

▶ Run
#!/usr/bin/perl

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

Eksempler

Her er et program, som viser nogle eksempler på funktion 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);
}

Output fra dette program:

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

Funktion length() returnerer samme værdi for linje '12' og for antallet 12 (antal 2). Hexadecimale tal 0xff er 255 i decimal notation og length() returnerer antallet 3. Den fungerer på samme måde, og nummeret er skrevet i binær notation.

Funktion length() , kan ikke bruges til at tælle antallet af elementer i arrayet eller hash. Hvordan du gør dette, er beskrevet på de følgende sider:

For ARRAYREF og HASHREF funktion length() returnerer antallet af tegn i strengene 'ARRAY(0x561a04e48578)'.

Officiel dokumentation

Her er outputtet af kommandoen 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.

Relaterede emner

Andre artikler