Referenzen zu verstehen ist eine grundlegende Voraussetzung, um Perl effektiv einzusetzen. Da Referenzen Skalare sind und Arrays und Hashes nur Skalare enthalten können, sind Referenzen der Schlüssel, um diese Datenstrukturen zu verschachteln.
Referenzen auf vorhandene Variablen und Unterprogramme erzeugst du mit dem Backslash-Operator \:
\$scalar, um eine Skalarreferenz zu erzeugen (das kann jeder beliebige Skalar sein, z. B. \1, nicht nur eine Variable).\@array, um eine Array-Referenz zu erzeugen.\%hash, um eine Hash-Referenz zu erzeugen.\&sub, um eine Code-Referenz zu erzeugen.Du kannst auch sogenannte anonyme Referenzen für Arrays, Hashes und Unterprogramme erzeugen:
['Alice', 'Bob', 'Charlie'], um eine anonyme Array-Referenz zu erzeugen.{foo => 'a', bar => 'b', baz => 'c'}, um eine anonyme Hash-Referenz zu erzeugen.sub { return 1 }, um eine anonyme Code-Referenz zu erzeugen.WARNUNG: Geschweifte Klammern können in Perl in bestimmten Zusammenhängen mehrdeutig sein. Wenn du nicht die Hash-Referenz bekommst, die du erwartest, setze ein Pluszeichen davor, um die Mehrdeutigkeit aufzulösen, z. B. +{}. Weitere Informationen findest du unter Geschweifte Klammern.
Auf Referenzen greifst du mit dem Pfeiloperator -> zu:
$ref->[0], um auf ein Element in einer Array-Referenz zuzugreifen.$ref->{foo}, um auf einen Wert in einer Hash-Referenz zuzugreifen.$ref->($arg), um ein Unterprogramm über eine Code-Referenz aufzurufen.Auf Daten in komplizierten Datenstrukturen wie mehrdimensionalen Arrays und verschachtelten Hashes kannst du zugreifen, indem du Indizes aneinanderreihst, z. B. $ref->{foo}[0]{bar} (gleichbedeutend mit $ref->{foo}->[0]->{bar}).
Wenn du ein ganzes Array oder einen ganzen Hash dereferenzieren willst, kannst du den Pfeiloperator gefolgt von @* bzw. %* verwenden, z. B. $ref->@* oder $ref->%*. Du kannst auch Slices einer Array- oder Hash-Referenz erhalten, indem du das * durch einen Index ersetzt, z. B. $ref->@[0..2] oder $ref->@{'Foo', 'Bar'}. Bei Slices gilt hier dieselbe Varianz der Sigils wie bei Array- und Hash-Variablen.