In Perl werden Variablen in Skalare ($), Arrays (@) und Hashes (%) unterteilt:
Skalare ($variable) – speichern einen einzelnen Wert (String, Zahl):
my $name = "Ivan"; my $age = 30;
Arrays (@array) – eine Sammlung von geordneten Elementen (indexiert durch Zahlen):
my @fruits = ("apple", "banana", "cherry"); print $fruits[1]; # banana
Hashes (%hash) – eine Sammlung von Schlüssel-Wert-Paaren (assoziatives Array):
my %colors = (red => "#ff0000", green => "#00ff00"); print $colors{"red"}; # #ff0000
Bitte beachten Sie, dass für den Zugriff auf ein Element ein spezifisches Symbol je nach Typ der Variable verwendet wird:
$array[0] — Element des Arrays$hash{"key"} — Wert des Hashes über den SchlüsselWas ist der Unterschied zwischen den Ausdrücken @array[1,2] und $array[1,2]?
Antwort:
@array[1,2]— gibt eine Liste von mehreren Elementen des Arrays zurück (Slice).$array[1,2]— ist falsch und führt zu einem Fehler. Um auf mehrere Elemente des Arrays zuzugreifen, verwendet man nur den Slice@array[...].Beispiel:
my @array = (10, 20, 30, 40); my @slice = @array[1,2]; # (20, 30)
Geschichte
In einem Logging-Projekt griff ein Programmierer auf ein Element des Hashes über
@colors{"red"}zu. Dadurch erhielt er keinen Wert des Hashes, sondern einen zufälligen Fehler, weil für einen einzelnen Wert$und nicht@benötigt wird.
Geschichte
In einem Dienst wurde bei der Iteration über die Indizes des Arrays vergessen, den richtigen Zugriff zu verwenden — anstelle von
$array[$i]wurde@array$iverwendet, was zu Warnungen und falschen Ergebnissen führte.
Geschichte
In einem API-Projekt wurde eine Funktion beschrieben, die ein Array als
$argsentgegennimmt, beim Aufruf wurde jedoch ein Array ohne Skalar übergeben:func(@list). Es stellte sich heraus, dass die Elemente des Arrays auf diese Weise in eine Liste „entfaltet“ wurden und die Funktion nicht wie erwartet funktionierte. Richtig wäre gewesen, das Array als@argszu empfangen.