|
Skalare - einfache Variablen
Listen - Arrays
Hashs - assoziative Listen
Referenzen - Zeiger auf Variablen
In Perl wird eine einfache Variable, die eine Zahl oder eine Zeichenkette speichern kann, als Skalar bezeichnet.
$Name = "Methusalem"; $Alter = 625; $Name_2 = "Junger Hansel"; $JungAlter = sqrt($Alter); |
#!/usr/bin/perl $Wert = 123456; $Teilwert = substr($Wert,1,3); print $Teilwert; |
Sie können Skalare für numerische Inhalte und Skalare für Zeichenketten definieren. Ob ein Skalar numerisch oder eine Zeichenkette ist, entscheiden Sie, wenn Sie dem Skalar einen Wert zuweisen oder indem Sie ihn in einer Anweisung verwenden. Eine angegebene Zeichenkette muß dabei in Anführungszeichen stehen. Normalerweise sind das doppelte Anführungszeichen, es sind aber auch einfache Anführungszeichen (zum Unterschied siehe Konventionen für Zeichenketten).
@Daten = ("Jana",23,"Berlin","Abitur"); print $Daten[0], " ist ", $Daten[1], " Jahre alt, wohnt in ", $Daten[2], " und hat ", $Daten[3]; |
#!/usr/bin/perl for($i = 1;$i <= 9;$i++) { $Wert = $i * $i; push(@Quadrate, $Wert); } for(@Quadrate) { print $_, "\n"; } |
#!/usr/bin/perl @Buchstaben = ("a".."z"); print $Buchstaben[2], "\n"; |
Sie können die Liste aber auch dynamisch erzeugen, wie es oben in Beispiel 2 innerhalb einer Schleife geschieht. In dem Beispiel wird innerhalb einer Schleife, die von 1 bis 9 zählt, die Liste @Quadrate dynamisch mit den Quadratzahlen zu den Zahlen 1 bis 9 gefüllt. Das geht jedoch nur mit Unterstützung von Funktionen zur Listenmanipulation, im Beispiel durch die Funktion push(), die Elemente an das Ende einer Liste anfügt.
Das obige Beispiel 3 zeigt eine besondere Variante, um eine Liste mit Daten zu füllen. Um eine Liste mit Zahlen (von - bis) oder mit Buchstaben (von - bis) aufzufüllen, genügt es, beim Definieren der Liste das erste und das letzte Listenelement anzugeben und dazwischen einfach zwei Punkte zu notieren (im Beispiel werden auf diese Weise alle Kleinbuchstaben von a bis z in eine Liste mit entsprechend vielen Elementen geschrieben - @Buchstaben = ("a".."z");.
Wenn Sie eine Liste mit Daten vorbelegen oder füllen, gelten die gleichen Regeln wie bei einfachen Skalaren: Zeichenketten werden in Anführungszeichen notiert, Zahlen ohne Anführungszeichen. Anstelle von Daten können Sie natürlich auch Skalare in eine Liste einfügen. Dann wird der Wert des betreffenden Skalars in die Liste übernommen.
Um ein bestimmtes Element innerhalb einer Liste anzusprechen, verwenden Sie den Variablennamen der Liste, setzen jedoch ein Dollarzeichen $ davor, genau so wie bei einem einfachen Skalar. Hinter dem Listennamen notieren Sie in eckigen Klammern, das wievielte Element der Liste Sie meinen. Dabei wird bei 0 zu zählen begonnen, d.h. das erste Listenelement einer Liste mit dem Namen @Listenname wird mit $Listenname[0] angesprochen, das zweite Element durch $Listenname[1] usw. Im ersten der obigen Beispiele können Sie das sehr gut studieren.
Die folgende Abbildung bezieht sich nochmals auf die obigen Beispiele 1 bis 3 und verdeutlicht, was jeweils in den Listen gespeichert ist, und wie die entsprechenden Listenelemente ansprechbar sind.
Sie können Zeichenketten und Zahlen ohne Probleme in derselben Liste speichern, wie im Beispiel 1 oben. Es gibt auch keine Vorschriften dafür, wie lang ein einzelnes Listenelement maximal sein darf. So können Sie auch eine komplette andere Liste als Element in einer Liste speichern. Ein Element in einer Liste innerhalb einer Liste sprechen Sie dann beispielsweise mit $Daten[2][4] an (das heißt: das 3. Element der Liste @Daten ist selbst eine Liste, z.B. mit dem Namen @Eigenschaften, die selbst wieder mehrere Elemente enthält, und das 5. Element dieser Liste soll angesprochen werden).
Sie dürfen ohne vorherige Listendefinition eine Anweisung notieren wie:
$Zahlen[5] = 43298;
Dabei wird dann automatisch eine Liste namens @Zahlen erzeugt, die zum Zeitpunkt des Erzeugens 6 Elemente hat, nämlich $Zahlen[0] bis $Zahlen[5]. Dabei ist nur $Zahlen[5] mit einem Wert belegt, die anderen Listenelemente sind leer.
Das letzte Element einer Liste können Sie immer auch durch $Listenname[-1] ansprechen. Die negative Indexzahl -1 ist für diesen Zweck reserviert.
%Daten = ("Name","Jana","Alter",23,"Ort","Berlin"); print $Daten{'Name'}, " ist ", $Daten{'Alter'}, " Jahre alt und wohnt in ", $Daten{'Ort'}; |
Um ein bestimmtes Element innerhalb eines Hashs anzusprechen, verwenden Sie den Variablennamen des Hashs, setzen jedoch ein Dollarzeichen $ davor, genau so wie bei einem einfachen Skalar. Hinter dem Namen des Hashs notieren Sie in geschweiften Klammern und einfachen Anführungszeichen den Hash-Namen des Elements, das Sie meinen. Im obigen Beispiel wird auf diese Weise etwa mit $Daten {'Name'} der zugehörige Wert "Jana" angesprochen.
Hashs lassen sich im Zusammenhang mit CGI-Scripts sehr sinnvoll einsetzen. So ist es beispielsweise möglich, den Datenstrom eines vom Anwender ausgefüllten HTML-Formulars in einen Hash einzulesen, wobei als Hash-Name jeweils der Name gespeichert wird, den ein Formularelement in der HTML-Datei hat, und als Wert der Wert, den der Anwender in dem betreffenden Formularelement eingegeben oder ausgewählt hat.
Das Besondere an Referenzen in Perl ist, daß der Wert einer Variablen so lange erhalten bleibt, wie es Referenzen dieser Variablen gibt. Das ist von Bedeutung, wenn Sie mit Unterprogrammen arbeiten, in denen lokal gültige Datentypen definiert werden.
#!/usr/bin/perl &A(); sub B() { print $$TextReferenz, "\n"; # Wert ist nur noch in der Referenz enthalten! } sub A() { my $Text = "Das ist ein kleiner Text"; $TextReferenz = \$Text; # Hier wird eine Referenz definiert &B(); } |
Sie können nicht nur Referenzen auf Skalare, sondern auch Referenzen auf Listen und Hashs oder Referenzen auf einzelne Elemente innerhalb von Listen oder Hashs definieren. Die folgende Tabelle bietet dazu eine Übersicht, wie die entsprechende Notation aussehen muß.
Referenz auf... | Referenz definieren | Referenz-Wert ansprechen | Referenz-Wert ansprechen (alternative Notation) |
---|---|---|---|
Skalar | $Skalarreferenz = \$Skalar | $$Skalarreferenz | ${$Skalarreferenz} |
Liste | $Listenreferenz = \@Liste | @$Listenreferenz | @{$Listenreferenz} |
Element in Liste | $Listenreferenz = \@Liste | @{$Listenreferenz}[0] | $Listenreferenz->[0] |
Hash | $Hashreferenz = \%Hash | %$Hashreferenz | %{$Hashreferenz} |
Element in Hash | $Hashreferenz = \%Hash | %{$Hashreferenz}{"Hashname"} | $Hashreferenz->{"Hashname"} |
Beachten Sie, daß Referenzen erst ab der Perl-Version 5.0 interpretiert werden. Ältere Perl-Interpreter bringen Syntaxyfehlermeldungen, wenn sie auf Referenzen stoßen.
Benutzen Sie Referenzen immer nur dann, wenn Sie einen Grund dazu haben!
Blättern: | |||
Grundsätzliches zu Perl-Scripts | Vordefinierte Variablen in Perl |
HTML-Dateien selbst erstellen | |||
Dokumentation: CGI/Perl | |||
CGI und Perl: Perl Sprachelemente |
© 1997 Stefan Münz, s.muenz@euromail.com