|
|
ArraysEin Array ist eine Folge von Skalaren. Wird ein Array als Konstante dargestellt, sind es einfach Werte, die durch Kommata voneinander getrennt werden und von einer runden Klammer umgeben sind. Der Name einer Arrayvariablen, die eine solche Liste aufnimmt, wird mit dem Zeichen @ eingeleitet.
[Arrays] my @primzahlen = (1,2,3,5,7,11,13,17,19); my @namensliste = ("Karl", "Friedrich", "Hans"); Die Werte innerhalb einer solchen Klammer müssen nicht gleichartig sein. Es können alle Skalare bunt gemischt auftreten. Sie müssen nicht einmal als Konstanten auftreten, es können auch Variablen eingesetzt werden. Um auf ein Element einer Arrayvariablen zuzugreifen, wird der Variablen in eckigen Klammern der Index des referenzierten Elements angefügt. Der Index beginnt bei 0. Beim Referenzieren wird auf ein Element des Arrays und nicht auf das gesamte Array zugegriffen. Die Elemente eines Arrays sind aber Skalare. Konsequenterweise wird einem Element eines Arrays auch wieder ein $ vorangestellt.
$wert = $primzahlen[4]; In diesem Fall wird das fünfte Element, also die 7 in die Variable $wert kopiert. Es ist nicht das vierte Element, da die Indizes bei 0 beginnen. Perl kann aber auch mehrere Elemente eines Arrays in ein anderes Arrays kopieren. In diesem Fall, werden die einzelnen Indizes in der eckigen Klammer in der gewünschten Reihenfolge aufgezählt und durch Kommata getrennt.
@werte = @primzahlen[4,3,1]; Damit enthält das Array @werte den Wert (7, 5, 2). Wenn dieser Vorgang für den Programmierer anderer Sprachen schon ungewöhnlich wirkte, dann wird die Möglichkeit, mit einer Zuweisung Werte in mehrere Variablen zu schieben, zur äußerst praktischen Kuriosität.
($erst, $zweit, @neuprimzahlen) = @primzahlen; Hier wird das erste Element des Arrays @primzahlen der Skalarvariablen $erst, das zweite der Skalarvariablen $zweit und der Rest des Arrays @primzahlen dem Array @neuprimzahlen zugewiesen. Das heißt, dass dem Array @neuprimzahlen die Werte 1 und 2 fehlen und ansonsten die restlichen Werte von @primzahlen hat. Den umgekehrten Weg erreichen Sie mit der nützlichen Funktion split(). Mit ihr können Sie eine Zeichenkette in ein Array aufbrechen. Die Bruchstelle wird durch ein frei wählbares Zeichen festgelegt. Diese Funktion erleichtert beispielsweise die Analyse von CGI-Übergabedaten sehr. Das folgende Beispiel teilt einen Satz in seine Worte an den Stellen auf, wo ein Leerzeichen steht.
@wort = split(/ /, $satz); Der erste Parameter ist das Leerzeichen, das durch beliebige Zeichen eingeschlossen werden kann. Üblicherweise verwendet man Anführungszeichen oder Schrägstriche. $wort[0] hat anschließend das erste Wort von $satz, $wort[1] das zweite und so weiter.
Eine kleine Spielerei soll als Beispiel dienen. Mit der Funktion
split() wird ein Namen an der Stelle, wo sich Leerzeichen befinden
aufgespalten. Das erste Element ist dann der Vorname und das zweite ist der
Nachname.
[Namenszerlegung] #!/usr/bin/perl -w $ask = <STDIN>; chomp($ask); # wirf den Zeilenvorschub weg! @name = split(/ /, $ask); print $name[0]."n"; print $name[1]."n";
Da es Menschen gibt, die mehr als einen Vornamen besitzen, ist die
Ermittlung des Nachnamens nicht besonders zuverlässig. An sich brauchen wir
nicht das zweite, sondern das letzte Element des Arrays. Hier die Änderung
für die letzte Zeile.
print $name[$#name]."n"; Die Zeichenkombination $# ermittelt den höchsten Index eines Arrays. Dieser Wert ist also um eins geringer als die Dimension des Arrays. Die beiden Zeichen werden dem Namen des Array statt des Zeichens @ vorangestellt. Ein leeres Array liefert -1. Im Beispiel oben wird dies als Index für das letzte Element verwendet. Die Dimension eines Arrays kann auch ermittelt werden, indem eine direkte Zuweisung eines Arrays an einen Skalar durchgeführt wird. Da ein Skalar ein Array nicht aufnehmen kann, geht Perl davon aus, dass der Programmierer die Dimension ermitteln will.
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|