Funktion length() in Perl

In der Programmiersprache Perl gibt es die eingebaute Funktion length(). Diese Funktion liefert die Länge der Zeichenfolge, die übergeben das argument an diese Funktion.

Hier ist ein Beispiel:

▶ Run
#!/usr/bin/perl

print( length('Hello') );

Dieses Programm zeigt die Anzahl der 5. In der 'Hello' fünf Zeichen.

Argumente

my $length = length($str);

Wenn die Funktionen length() ein argument übergeben, wird die Funktion mit ihm zu arbeiten.

Wenn nicht kein argument übergeben, wird die Funktion arbeitet mit einer Variablen $_. Hier ist ein Beispiel (zeigt das Programm die Anzahl der 4):

▶ Run
#!/usr/bin/perl

$_ = 'asdf';

print( length() );

Wenn die Funktionen length() übergeben mehr als ein argument, dann wird der Fehler:

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

Der Rückgabewert

Funktion length() gibt entweder undef, oder eine positive ganze Zahl. Die Funktion gibt undef nur, wenn Sie übergaben undef.

Hier sind drei Programme, in deren jeder Sie length() gibt undef. Sind alle drei gleichwertig.

▶ 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() gibt die Anzahl der Zeichen in einer Zeile und nicht die Anzahl der Bytes, aber Sie brauchen, um eine Zeile wurde mit der Flagge, die besagt, dass in der Zeile ist Unicode. Dies Flag wird automatisch angezeigt und bei den beschriebenen Zeilen im Code, wenn im Programm es gibt use utf8;. Hier ist ein Programm, das liefert die Anzahl der 7 — dies ist die korrekte Menge Zeichen in dieser Zeile:

▶ Run
#!/usr/bin/perl

use utf8;

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

Aber wenn das Programm nicht use utf8;, dann bestimmte Zeilen in einem Programm als eine Sequenz von Bytes und die Funktion length() gibt die Anzahl der Bytes. Hier ist das Programm verwendet die gleiche Zeile wie im vorherigen Beispiel, aber dieses Programm zeigt auf dem Bildschirm die Anzahl der 14 (in der Zeile 7 Buchstaben, jeder Buchstabe nimmt zwei Bytes):

▶ Run
#!/usr/bin/perl

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

Beispiele

Hier ist ein Programm, das zeigt einige Beispiele der Verwendung der 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);
}

Das Ergebnis der Arbeit des Programms:

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

Funktion length() gibt denselben Wert für und für die Zeile '12' und für die Anzahl der 12 (Anzahl 2). Hexadezimalzahl 0xff ist 255 in десятеричной Schreibweise und length() gibt die Anzahl der 3. Genau so arbeiten und die Zahl aufgezeichnet, die im Binärmodus.

Funktion length() kann nicht benutzt werden, um die Anzahl der Elemente in einem array oder хеше. Wie es geht ist beschrieben auf den Seiten:

Für ARRAYREF und HASHREF Funktion length() gibt die Anzahl der Zeichen in den Zeilen der Art 'ARRAY(0x561a04e48578)'.

Die offizielle Dokumentation

Hier ist die Ausgabe des Befehls 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.

Verwandte Themen

Andere Artikel