Eine weitere Art von Variablen sind die Array Variablen. Sie stellen eine Liste von skalaren Variablen dar (ie. Zahlen und Strings). Die Namen von Array-Variablen haben dasselbe Format, wie die skalaren Variablen, ausser das sie anstelle eines $-Symbols, am Anfang ein @-Symbol brauchen. Der Ausdruck
@food = ('apples', 'pears', 'eels');
@music = ('whistle', 'flute');
weist der Variablen @food eine Liste von drei Elementen zu, während @music eine Liste von zwei Elementen zugewiesen wird.
Die Array-Element werden mittels Indizes in eckigen Klammern zugegriffen. Der Index beginnt bei 0. Der Ausdruck
$food[2]
hat einen Rückgabewert von "eels". Beachte, dass nicht mehr @, sondern $ am Anfang des Variablennamens steht. Ein Element eines Arrays ist ein Skalar!
Wie alles in Perl kann der gleiche Ausdruck in unterschiedlichem Kontext ein anderes Resultat erzeugen. Die erste Zuweisung unten ergänzt den Array @music. Somit sind beide Zuweisungen äquivalent.
@moremusic = ('organ', @music, 'harp');
@moremusic = ('organ', 'whistle', 'flute', 'harp');
Damit können Elemente zu einem Array hinzugefügt werden. Ein anderer Weg um Elemente hinzuzufügen sieht folgendermassen aus:
push(@food, 'eggs');
Damit wird "eggs" am Ende des Arrays @food angehängt. Mehr als ein Element kann wie folgt angehängt werden:
push(@food, 'eggs', 'lard');
push(@food, ('eggs', 'lard'));
push(@food, @morefood);
Die push hat als Rückgabewert die neue Länge des Arrays.
Analog kann mit pop das letzte Element von einer Liste entfernt werden. pop entfernt von der ursprünglichen Liste @food das letzte Element "eels". Der Rückgabewert ist das entfernte Element. @food hat nun noch zwei Elemente:
$grub = pop(@food); # Jetzt ist $grub = 'eels' (grub=Frass)
Es ist auch möglich, einem Array eine skalare Variable zuzuordnen. Wie immer ist der Kontext wichtig. Die Zeile
$f = @food;
Weist $f die Länge des Array $food zu. Hingegen wird mit
$f = "@food";
die Liste in einen String konvertiert mit einem Leerzeichen zwischen den Elementen. Dieses Leerzeichen kann durch einen beliebigen String ersetzt werden, indem dieser String der Spezialvariable $" zugeordnet wird. Diese Variable ist eine von vielen Spezialvariablen, mit welchen das Verhalten von Perl gesteuert werden kann.
Array können auch verwendet werden, um gleichzeitig mehrere Zuordnungen von skalare Variablen zu machen:
($a, $b) = ($c, $d); # Aequvalent $a=$c; $b=$d;
($a, $b) = @food; # $a und $b sind die ersten
# beiden Elemente von @food.
($a, @somefood) = @food; # $a ist das erste El. von @food
# @somefood sind die übrigen
(@somefood, $a) = @food; # @somefood ist @food und
# $a ist nicht definiert.
Zur letzten Zuweisung ist zu bemerken, dass Arrays alle Elemente, welche sie antreffen, kopieren werden. Damit ist diese letzte Form nicht sehr nützlich.
Zum Schluss möchten wir noch die Länge eines Arrays bestimmen können. Der Ausdruck
$#food
ergibt den Index des letzten Elementes eines Arrays. Sofern wir mit dem Index 0 begonnen haben (Achtung: Spezialvariable $[) wird die Länge von @food:
$len=$#food+1;
oder im allgemeinen:
$len=$#food+1-$[;
Weil der Kontext wichtig ist, ist es nicht erstaunlich, dass die folgenden Ausdrücke alle unterschiedliche Resultate erzeugen:
print @food; #
print "@food"; # mit doppelten Anführungszeichen
print @food.""; # in skalarem Kontext (. Konkat.)
Wir probieren die obigen print-Statements aus und schauen, was dabei herauskommt. Man darf es sich auch vorher überlegen!
ETH Zürich: ID/Systemdienste, Roland Dietlicher 6.2.98