Referenzen

Der allokierte Speicherbereich für eine Variable (Skalar, Array, Hash) kann durch den Varibalennamen angesprochen werden. Dieser Varablenname kann lokal oder global gültig sein. Ist der Varablenname lokal gültig ( z.B. in einer Funktion ) so stirbt der Varablenname nach Abarbeitung der Funktion, der Speicherbereich wird wieder freigegeben.

Eine Referenz auf eine Variable bietet die Möglichkeit, auf den allokierten Speicherbereich zuzugreifen (vgl. Call by Reference bei Parameterübergabe). Wird eine globale Variable an ein Unterprogramm übergeben, so wird der Speicherbereich in den Code hineinkopiert, wird eine Referenz übergeben, dann wird nur die Speicheradresse des Objekts übergeben.

Wird nun eine Referenz auf eine lokale Variable definiert, so stirbt der Variablenname, wenn das Programm den Gültigkeitsbereich der Variablen verläßt (i.A. nach Beendigung der Funktion). Da aber eine Referenz existiert, wird der Speicherbereich nicht freigegeben. Dies geschieht erst mit dem Sterben der letzten Referenz auf das Hauptspeicherobjekt. Damit ist der Varablenname nicht mehr verwendbar, der Speicherbereich über die Referenz sehr wohl.

Wird nun eine Referenz aus einer Funktion heraus zurückgegeben, so spielt der ursprüngliche Name der Variablen keine Rolle. Ebensogut kann man für das erzeugte Speicherobjekt in der Funktion eine Anonyme Variable verwenden.


Syntaxbeispiele für Referenzen

Benannte Variablen :

$scalar_ref = \$scalar $array_ref = \@array
$hash_ref = \%hash $func_ref = \&function

Anonyme Variablen :

$scalar_ref = \42 $array_ref = [ "eins","zwei","drei" ]
$hash_ref = { "key1" => "val1",...} $func_ref = sub { print "bla" }

Zugriff auf den Speicherinhalt

Syntaxbeispiele zum Dereferenzieren von Referenzen :

Anonyme Hashes

%hash = %$hash_ref %hash = %{$hash_ref}
$my_hash_value1 = ${$hash_ref}{'key1'} $my_hash_value1 = $hash_ref->{'key1'}

Essenz

Den Speicherinhalt eines anonymen Hashes kann man mit
$my_hash_value1 = $hash_ref->{'key1'}
auslesen.