Perl Referenzen

Eine Referenz ist ein Zeiger. Eine Perl-Referenz ist ein Skalartyp, der auf Variablen, Arrays, Hashes (auch assoziative Arrays genannt) und sogar Subroutinen zeigen kann und überall im Programm verwendet werden kann.


Referenzen erstellen

Wenn Sie eine Variable definieren, stellen Sie dem Variablennamen ein \ voran, um eine Referenz auf diese Variable zu erhalten, zum Beispiel:

$scalarref = \$foo;     # 标量变量引用
$arrayref  = \@ARGV;    # 列表的引用
$hashref   = \%ENV;     # 哈希的引用
$coderef   = \&handler; # 子过程引用
$globref   = \*foo;     # GLOB句柄引用

In Arrays können wir anonyme Array-Referenzen verwenden, die mit [] definiert werden:

$aref= [ 1,"foo",undef,13 ];

Die Elemente eines anonymen Arrays können selbst anonyme Arrays sein, sodass wir diese Methode verwenden können, um Arrays von Arrays und Arrays beliebiger Dimension zu konstruieren.

my $aref = [
        [1, 2, 3],
        [4, 5, 6],
        [7, 8, 9],
]

In Hashes können wir anonyme Hash-Referenzen verwenden, die mit {} definiert werden:

$href= { APR =>4, AUG =>8 };

Wir können auch eine anonyme Subroutine-Referenz ohne einen Subroutine-Namen erstellen:

$coderef = sub { print "Example!\n" };

Dereferenzierung

Dereferenzierung kann mit $, @ oder % erfolgen, je nach Typ, zum Beispiel:

Beispiele

#!/usr/bin/perl $var = 10; # $r referenziert den Skalar $var $r = \$var; # Gib den Wert der von $r gespeicherten Variable aus print "$varist:", $$r, "\n"; @var = (1, 2, 3); # $r referenziert das Array @var $r = \@var; # Gib den Wert der von $r gespeicherten Variable aus print "@var ist:", @$r, "\n"; %var = ('key1' => 10, 'key2' => 20); # $r referenziert den Hash %var $r = \%var; # Gib den Wert der von $r gespeicherten Variable aus print "\%var ist:", %$r, "\n";

Die Ausführung des obigen Beispiels erzeugt das folgende Ergebnis:

10 为 : 10
1 2 3 为: 123
\%var 为 : key110key220

Wenn Sie sich nicht sicher über den Variablentyp sind, können Sierefverwenden, um ihn zu bestimmen. Die Rückgabewerte sind wie folgt. Wenn keiner der folgenden Werte zutrifft, wird false zurückgegeben:

SCALAR
ARRAY
HASH
CODE
GLOB
REF

Beispiel:

Beispiele

#!/usr/bin/perl $var = 10; $r = \$var; print "Referenztyp von r:", ref($r), "\n"; @var = (1, 2, 3); $r = \@var; print "Referenztyp von r:", ref($r), "\n"; %var = ('key1' => 10, 'key2' => 20); $r = \%var; print "Referenztyp von r:", ref($r), "\n";

Die Ausführung des obigen Beispiels erzeugt das folgende Ergebnis:

r 的引用类型 : SCALAR
r 的引用类型 : ARRAY
r 的引用类型 : HASH

Zirkuläre Referenzen

Zirkuläre Referenzen entstehen, wenn zwei Referenzen sich gegenseitig enthalten. Sie müssen sie sorgfältig verwenden, sonst verursacht es Speicherlecks, wie im folgenden Beispiel:

Beispiele

#!/usr/bin/perl my $foo = 100; $foo = \$foo; print "Wert von foo ist: ", $$foo, "\n";

Die Ausführung des obigen Beispiels erzeugt das folgende Ergebnis:

Value of foo is : REF(0x9aae38)

Funktionsreferenzen

Format einer Funktionsreferenz: \&

Format zum Aufrufen einer Funktionsreferenz: & + der erstellte Referenzname.

Beispiel:

Beispiele

#!/usr/bin/perl # Funktionsdefinition sub PrintHash{ my (%hash) = @_; foreach $item (%hash){ print "Elemente:$item\n"; } } %hash = ('name' => 'example', 'age' => 3); # Eine Referenz auf die Funktion erzeugen $cref = \&PrintHash; # Die Funktion über die Referenz aufrufen &$cref(%hash);

Die Ausführung des obigen Beispiels erzeugt das folgende Ergebnis:

元素 : age
元素 : 3
元素 : name
元素 : example
Andere Erweiterungen