SELFHTML/Quickbar CGI/Perl Perl-Sprachelemente

| ## Vordefinierte Variablen in Perl
| Allgemeines zu vordefinierten Variablen Vordefinierte Skalare Vordefinierte Listen und Hashs Perl-eigene Umgebungsvariablen

## Allgemeines zu vordefinierten Variablen

Perl hält eine Fülle spezieller, vordefinierter Variablen bereit. Den Inhalt dieser Variablen können Sie auslesen, um Informationen zur aktuellen Perl-Konfiguration zu ermitteln, oder um die Systemkonfiguration des Rechners, auf das Script und der Perl-Interpreter laufen, zu ermitteln. Einige der Variablen haben je nach Prozedur-Situation bestimmte Inhalte. Diese Möglichkeiten sollten Sie jedoch erst nutzen, wenn Sie mit Perl gut vertraut sind.

## Vordefinierte Skalare

Die folgende Liste ist nicht vollständig, sondern enthält nur einige wichtige vordefinierte Skalare.

Skalar | Erläuterung | Beispiel
--- | --- | ---
`$_` | Die bekannteste vordefinierte Variable in Perl. Sie enthält in Suchläufen (z.B. bei der Suche in einer Liste) den jeweils aktuellen Wert. Sie kann direkt in die Suche integriert werden, ohne daß eine selbst definierte Variable erforderlich ist. Das nebenstehende Beispiel gibt einfach der Reihe nach alle Zahlen aus, die in der Liste `@Zahlen` definiert wurden. | `@Zahlen = (1..10); for(@Zahlen) { print $_, "\n"; }`
`$.` | Enthält die aktuelle Zeilennummer der zuletzt eingelesenen Datei. Im nebenstehenden Beispiel werden alle Zeilen einer Textdatei eingelesen und ausgegeben. Am Ende kann `$.` darüber Auskunft geben, wie viele Zeilen eingelesen wurden. | `open(DATEI, "<readme.txt"); while(<DATEI>) { print $_; } print $., " Zeilen gelesen"; close(DATEI);`
`$/` | Enthält den eingestellten Eingabeseparator. Kann geändert werden - auch mehrere Zeichen sind erlaubt. Das nebenstehende Beispiel bewirkt, daß eine Eingabe von der Standardeingabe erst dann abgeschlossen ist, wenn der Anwender die Zeichenfolge ENDE eingibt und <Return> drückt. | `$/ = "ENDE"; $DeinName = <STDIN>; print $DeinName;`
`$]` | Enthält die Versionsnummer des verwendeten Perl-Interpreters. Gut geeignet, um bei Scripts die Ausführung des restlichen Programmcodes davon abhängig zu machen, daß der Perl-Interpreter mindestens eine bestimmte Versionsnummer hat. | `if($] < 5) { die "Perl-Interpreter zu alt"; } else { print $]; }`
`$!` | Enthält eine im aktuellen Programm-Kontext aktuelle Fehlermeldung oder Fehlernummer, sofern ein Fehler aufgetreten ist. Die nebenstehende Anweisung versucht eine Datei zu öffnen und gibt im Fehlerfall die vordefinierte Perl-Fehlermeldung aus, wenn die Datei nicht geöffnet werden kann. | `open(DATEI, "<nixda.txt") || print $!;`
`$0` | Enthält den Dateinamen des Perl-Scripts, das gerade ausgeführt wird. Wert kann geändert werden. | `print $0, " wird ausgefuehrt!";`
`$$` | Enthält die Prozeß-ID des Perl-Scripts, das gerade ausgeführt wird. Vor allem unter Unix von Interesse. | `"Prozess ", $$, " wird ausgefuehrt!";`
`$^T` | Enthält den genauen Zeitpunkt (Millisekunden), zu dem das Script gestartet wurde. Das nebenstehende Beispiel stellt einen kleinen Benchmark-Test dar. Es führt eine lange Schleife von Berechnungen durch und ermittelt, wie lange das Perl-Script dazu braucht. | `@Zahlen = (1..50000); for(@Zahlen) { $x = sqrt($_); } $Start = $^T; $Jetzt = time; print "Laufzeit: ", $Jetzt - $Start, " ms\n";`
`$&` | Enthält nach Anwenden eines regulären Ausdrucks den Wert, auf den das Suchmuster paßte. | `$Satz = "Mann und Frau"; $Satz =~ /\bund\b.*/; print $&;`
`$+` | Enthält nach Anwenden eines regulären Ausdrucks mit Klammern den Inhalt der Klammer, die mit dem letzten Suchmuster übereinstimmte. | `$Satz = "Mann und Frau"; $Satz =~ /(\bund\b).*/; print $+;`
`$1, $2, usw.` | Enthält nach Anwenden eines regulären Ausdrucks mit Klammern die Werte der Klammern 1, 2 usw., auf die das in der jeweiligen Klammer definierte Suchmuster paßte. | `$Satz = "Mann und Frau und Kind"; $Satz =~ /(\bund\b).*\1/; print $1;`

## Vordefinierte Listen und Hashs

Die folgende Liste ist nicht vollständig, sondern enthält nur einige wichtige vordefinierte Listen- und Hash-Variablen.

Liste/Hash | Erläuterung | Beispiel
--- | --- | ---
`@_` | Enthält die Parameter, die beim Aufruf eines Unterprogramms übergeben wurden. Innerhalb des Unterprogramms sind die übergebenen Parameter mit `$_[0]` (= erster Parameter), `$_[1]` (= zweiter Parameter) usw. ansprechbar. | `&Sprich("Hallo Welt"); sub Sprich { print $_[0]; }`
`@ARGV` | Enthält die Parameter, die beim Aufruf des Perl-Scripts mit übergeben wurden. Wenn z.B. `perl test.pl meintext.txt` eingegeben wurde, ist `meintext.txt` der erste Parameter aus Sicht des Perl-Scripts. Das Script kann Parameter als Input für den Programmablauf auswerten. Im nebenstehenden Beispiel wird der erste übergebene Parameter `$ARGV[0]` als Dateiname interpretiert. Das Script versucht, diese Datei zu öffnen. | `open(DATEI, "<$ARGV[0]") || die "Fehler!"; print $ARGV[0], " geoeffnet!"; close(DATEI);`
`%ENV` | Enthält die komplette Rechnerumgebung, wie Sie dem Perl-Interpreter bekannt ist (geladene Treiber, Systemprogramme usw.). Das nebenstehende Beispiel gibt die Elemente der in diesem Hash gespeicherten Daten aus. | `for(%ENV) { print $_, "\n"; }`

## Perl-eigene Umgebungsvariablen

Perl benutzt Umgebungsvariablen vor allem, um dem Perl-Interpreter bestimmte Suchverzeichnisse zu bezeichnen. Die folgende Liste ist nicht vollständig, sondern enthält nur einige wichtige vordefinierte Umgebungsvariablen. Den Inhalt einer Umgebungsvariablen können Sie mit einer Anweisung wie `$Wert = $ENV{'PATH'};` abfragen. Wichtig ist dabei die Verwendung von `$ENV{'Variablenname'}` - der Name der Variablen muß in geschweiften Klammern stehen und sollte durch einfache Anführungszeichen eingeschlossen sein.

Variable | Erläuterung
--- | ---
`HOME` | Enthält das Verzeichnis, zu dem gesprungen werden soll, wenn eine chdir-Anweisung keine Parameter enthält (Unix-typisch)
`PATH` | Enthält den kompletten Pfad, d.h. alle Verzeichnisse, in denen nach ausführbaren Programmen gesucht werden soll. Wird von Perl benutzt, wenn aus einem Perl-Script andere Perl-Scripts aufgerufen werden, deren Lage nicht näher angegeben ist.

weiter: | Bedingte Anweisungen
zurück: | Variablen und Datentypen

SELFHTML/Quickbar CGI/Perl Perl-Sprachelemente

© 1998 Stefan Münz, muenz@csi.com