<< Schleifen | Inhalt | Strings und Zahlen >> |
Diese Variable kennen wir schon ... Wir wissen auch, dass man die Variable $_ gar nicht sieht, wenn man diese verwendet. Hier noch einmal eine kleine unvollständige Liste, wo $_ auftritt:
Beispiel | Beschreibung |
print; | Ausgabe auf die Standardausgabe (dasselbe wie print $_;) |
foreach (@array) { | statt foreach $_ (@array) bzw. foreach $eineVariable (@array) |
/.../; | statt $_=~/.../; |
s/.../.../; | statt $_=~s/.../.../; |
chop($var); | statt $_=chop($var);. Das abgeschnittene Zeichen in $var steht in $_. Liefert eine Funktion eine Rückgabe (wie z. B. chop()) und wird dieser Rückgabewert keiner Variablen zugewiesen, dann steht dieser in $_. |
Auch diese Variable kennen wir schon: Das ist das Array in dem die Übergabeparameter einer Funktion stehen. @_ ist lokal! Aber das ist sowieso klar - zumindest geht man davon aus. Mit $_[0], $_[1], etc. greift man auf die Elemente von @_ zu. Man kann auch mit dem Ooperator shift das erste Element von @_ auslesen (in eine lokale Variable: my $file=shift(@_);) und löschen (vgl. Hinzufügen und Löschen von Arrayelementen). Innerhalb einer Funktion sind folgende Zeilen äquivalent:
shift bezieht sich innerhalb einer Funktion immer auf @_.
Auch diese kennen wir schon: @ARGV enthält die Elemente die beim Programmaufruf übergeben wurden. Auch dieses Array kann - falls nötig - verändert werden. Wird der shift-Operator im Hauptprogramm (also in keiner Funktion) angewendet, so betrifft das das Array @ARGV.
Das $# wird in Zusammenhang mit einem Array gebraucht - und zwar mit dem letzten Element! Um genauer zu sein $#einArray ist der Index des letzten Elements. Man kann diesen Index abfragen und auch verändern:
Kennen wir auch schon (vgl. Klammerung und die Variable $1 bzw. \1 bei regulären Ausdrücken).
Zusätzlich zu $1 (...) besitzt Perl noch drei weitere Variablen $`, $& und $'. Diese beziehen sich auf den String, der mit dem Muster verglichen wird: $& verweist auf den Teil der Zeichenkette des getesteten Strings, auf dem das ganze Muster passt. $` den Teil verweist auf den String vor dem Muster und $' auf den Teil nach dem Muster. Diese Variablen werden auch Vergleichsvariablen genannt.
Das ergibt:
Wird ein Systemfehler erzeugt, so gibt $! den Fehler an: Entweder die Nummer des Fehlers - falls $! in einem numerischen Kontext steht - oder den Fehlertext - falls $! in einem Zeichenkettenkontext steht:
Ergibt:
Normalerweise ist das Standardtrennzeichen zur Eingabetrennung das Newlinezeichen "\n". Liest man dann ein File ein (z. B. mit einer while-Schleife) geschieht dies zeilenweise, weil das Trennzeichen eben das Newlinezeichen ist. Wird dies verändert - z. B. auf undef - das ist ein undefinierter Wert (nicht 0 oder "") - dann kann man das einlesen noch schneller gestalten. Um das Trennzeichen zu ändern muss die Variable $/ neu gesetzt werden. Das ist aber mit Vorsicht zu geniesen. In jedem Fall sollte dies nur lokal (das heißt mit local) passieren und nicht global!
Einlesen - mal etwas anders:
Ein Beispielprogramm um den Abbruch der Standardeingabe zu verändern: Von "\n" nach "\nquit\n".
<< Schleifen | Inhalt | Strings und Zahlen >> |
© 2001-2003 Perl, Lehrstuhl Mathe II, Uni Bayreuth |