Perl - Spezielle Variablen

Es gibt einige Variablen, die in Perl eine vordefinierte und besondere Bedeutung haben. Dies sind die Variablen, die Interpunktionszeichen nach dem üblichen Variablenindikator ($, @ oder%) verwenden, z. B. $ _ (siehe unten).

Die meisten speziellen Variablen haben einen englischen langen Namen, z. B. die Betriebssystemfehlervariable $! kann als $ OS_ERROR geschrieben werden. Wenn Sie jedoch englische Namen verwenden möchten, müssen Sie eine Zeile einfügenuse English;oben in Ihrer Programmdatei. Dies führt den Interpreter dazu, die genaue Bedeutung der Variablen zu erfassen.

Die am häufigsten verwendete Spezialvariable ist $ _, die die Standardeingabe und die Mustersuchzeichenfolge enthält. Zum Beispiel in den folgenden Zeilen -

#!/usr/bin/perl

foreach ('hickory','dickory','doc') {
   print $_;
   print "\n";
}

Bei der Ausführung wird das folgende Ergebnis erzielt:

hickory
dickory
doc

Lassen Sie uns noch einmal dasselbe Beispiel überprüfen, ohne die Variable $ _ explizit zu verwenden -

#!/usr/bin/perl

foreach ('hickory','dickory','doc') {
   print;
   print "\n";
}

Bei der Ausführung wird auch das folgende Ergebnis erzielt:

hickory
dickory
doc

Bei der ersten Ausführung der Schleife wird "Hickory" gedruckt. Beim zweiten Mal wird "dickory" gedruckt, und beim dritten Mal wird "doc" gedruckt. Dies liegt daran, dass in jeder Iteration der Schleife die aktuelle Zeichenfolge in $ _ platziert wird und standardmäßig standardmäßig verwendet wird. Hier sind die Stellen, an denen Perl $ _ annimmt, auch wenn Sie es nicht angeben -

  • Verschiedene unäre Funktionen, einschließlich Funktionen wie ord und int sowie alle Dateitests (-f, -d) mit Ausnahme von -t, der standardmäßig STDIN ist.

  • Verschiedene Listenfunktionen wie Drucken und Aufheben der Verknüpfung.

  • Die Mustervergleichsoperationen m //, s /// und tr ///, wenn sie ohne einen Operator = ~ verwendet werden.

  • Die Standard-Iteratorvariable in einer foreach-Schleife, wenn keine andere Variable angegeben wird.

  • Die implizite Iteratorvariable in den Funktionen grep und map.

  • Der Standardort zum Einfügen eines Eingabedatensatzes, wenn das Ergebnis einer Zeileneingabeoperation als einziges Kriterium eines while-Tests (dh) selbst getestet wird. Beachten Sie, dass dies außerhalb eines Weile-Tests nicht der Fall ist.

Spezielle Variablentypen

Basierend auf der Verwendung und Art der speziellen Variablen können wir sie in die folgenden Kategorien einteilen:

  • Globale skalare Spezialvariablen.
  • Globale Array-Spezialvariablen.
  • Globale Hash-Spezialvariablen.
  • Globale spezielle Dateihandles.
  • Globale Sonderkonstanten.
  • Spezielle Variablen für reguläre Ausdrücke.
  • Dateihandle Spezialvariablen.

Globale skalare Spezialvariablen

Hier ist die Liste aller skalaren Spezialvariablen. Wir haben entsprechende englische Namen zusammen mit den symbolischen Namen aufgelistet.

$ _ Der Standardeingabe- und Mustersuchbereich.
$ ARG
$. Die aktuelle Eingabezeilennummer des zuletzt gelesenen Dateihandles. Ein explizites Schließen des Dateihandles setzt die Zeilennummer zurück.
$ NR
$ / Das Eingabedatensatztrennzeichen; Zeilenumbruch standardmäßig. Wenn die Nullzeichenfolge festgelegt ist, werden Leerzeilen als Trennzeichen behandelt.
$ RS
$, Das Ausgabefeldtrennzeichen für den Druckoperator.
$ OFS
$ \ Das Ausgabedatensatztrennzeichen für den Druckoperator.
$ ORS
$ " Wie "$", außer dass es für Listenwerte gilt, die in eine Zeichenfolge in doppelten Anführungszeichen (oder eine ähnlich interpretierte Zeichenfolge) interpoliert sind. Standard ist ein Leerzeichen.
$ LIST_SEPARATOR
$; Das tiefgestellte Trennzeichen für die mehrdimensionale Array-Emulation. Standard ist "\ 034".
$ SUBSCRIPT_SEPARATOR
$ ^ L. Was für ein Format wird ausgegeben, um einen Formfeed durchzuführen. Standard ist "\ f".
$ FORMAT_FORMFEED
$: Der aktuelle Zeichensatz, nach dem eine Zeichenfolge unterbrochen werden kann, um Fortsetzungsfelder (beginnend mit ^) in einem Format zu füllen. Standard ist "\ n" ".
$ FORMAT_LINE_BREAK_CHARACTERS
$ ^ A. Der aktuelle Wert des Schreibakkumulators für Formatzeilen.
$ AKKU
$ # Enthält das Ausgabeformat für gedruckte Zahlen (veraltet).
$ OFMT
$? Der Status, der vom letzten Pipe-Schließen, Backtick-Befehl (``) oder Systembetreiber zurückgegeben wurde.
$ CHILD_ERROR
$! Bei Verwendung in einem numerischen Kontext wird der aktuelle Wert der Variablen errno angegeben, der den letzten Systemaufruffehler identifiziert. Bei Verwendung in einem Zeichenfolgenkontext wird die entsprechende Systemfehlerzeichenfolge ausgegeben.
$ OS_ERROR oder $ ERRNO
$ @ Die Perl-Syntaxfehlermeldung vom letzten Auswertungsbefehl.
$ EVAL_ERROR
$$ Die PID des Perl-Prozesses, auf dem dieses Skript ausgeführt wird.
$ PROCESS_ID oder $ PID
$ < Die tatsächliche Benutzer-ID (UID) dieses Prozesses.
$ REAL_USER_ID oder $ UID
$> Die effektive Benutzer-ID dieses Prozesses.
$ EFFECTIVE_USER_ID oder $ EUID
$ ( Die reale Gruppen-ID (gid) dieses Prozesses.
$ REAL_GROUP_ID oder $ GID
$) Das effektive Gid dieses Prozesses.
$ EFFECTIVE_GROUP_ID oder $ EGID
$ 0 Enthält den Namen der Datei, die das ausgeführte Perl-Skript enthält.
$ PROGRAM_NAME
$ [ Der Index des ersten Elements in einem Array und des ersten Zeichens in einem Teilstring. Standard ist 0.
$] Gibt die Version plus Patchlevel geteilt durch 1000 zurück.
$ PERL_VERSION
$ ^ D. Der aktuelle Wert der Debugging-Flags.
$ DEBUGGING
$ ^ E. Erweiterte Fehlermeldung auf einigen Plattformen.
$ EXTENDED_OS_ERROR
$ ^ F. Der maximale Systemdateideskriptor, normalerweise 2.
$ SYSTEM_FD_MAX
$ ^ H. Enthält interne Compiler-Hinweise, die von bestimmten pragmatischen Modulen aktiviert werden.
$ ^ I. Der aktuelle Wert der Inplace-Edit-Erweiterung. Verwenden Sie undef, um die Inplace-Bearbeitung zu deaktivieren.
$ INPLACE_EDIT
$ ^ M. Der Inhalt von $ M kann als Notspeicherpool verwendet werden, falls Perl mit einem Speicherfehler stirbt. Die Verwendung von $ M erfordert eine spezielle Zusammenstellung von Perl. Weitere Informationen finden Sie im INSTALL-Dokument.
$ ^ O. Enthält den Namen des Betriebssystems, für das die aktuelle Perl-Binärdatei kompiliert wurde.
$ OSNAME
$ ^ P. Das interne Flag, das der Debugger löscht, damit er sich nicht selbst debuggt.
$ PERLDB
$ ^ T. Die Zeit, zu der das Skript gestartet wurde, in Sekunden seit der Epoche.
$ BASETIME
$ ^ W. Der aktuelle Wert des Warnschalters, entweder wahr oder falsch.
$ WARNUNG
$ ^ X. Der Name, unter dem die Perl-Binärdatei selbst ausgeführt wurde.
$ EXECUTABLE_NAME
$ ARGV Enthält den Namen der aktuellen Datei beim Lesen von <ARGV>.

Globale Array-Spezialvariablen

@ ARGV Das Array mit den Befehlszeilenargumenten für das Skript.
@INC Das Array mit der Liste der Stellen, an denen nach Perl-Skripten gesucht werden soll, die von den Konstrukten do, require oder use ausgewertet werden sollen.
@F Das Array, in das die Eingabezeilen aufgeteilt werden, wenn der Befehlszeilenschalter -a angegeben wird.

Globale Hash-Spezialvariablen

% INC Der Hash, der Einträge für den Dateinamen jeder Datei enthält, die über do oder require eingefügt wurde.
% ENV Der Hash, der Ihre aktuelle Umgebung enthält.
% SIG Der Hash, mit dem Signalhandler für verschiedene Signale eingestellt werden.

Globale spezielle Dateihandles

ARGV Das spezielle Dateihandle, das über Befehlszeilendateinamen in @ARGV iteriert. Wird normalerweise als Null-Dateihandle in <> geschrieben.
STDERR Das spezielle Dateihandle für Standardfehler in jedem Paket.
STDIN Das spezielle Dateihandle für die Standardeingabe in jedem Paket.
STDOUT Das spezielle Dateihandle für die Standardausgabe in jedem Paket.
DATEN Das spezielle Dateihandle, das sich auf alles bezieht, was dem Token __END__ in der Datei folgt, die das Skript enthält. Oder das spezielle Dateihandle für alles, was dem Token __DATA__ in einer erforderlichen Datei folgt, solange Sie Daten im selben Paket lesen __DATA__ in.
_ (Unterstrich) Das spezielle Dateihandle, mit dem die Informationen des letzten stat-, lstat- oder Dateitestoperators zwischengespeichert werden.

Globale Sonderkonstanten

__ENDE__ Zeigt das logische Ende Ihres Programms an. Jeder folgende Text wird ignoriert, kann jedoch über das DATA-Dateihandle gelesen werden.
__DATEI__ Stellt den Dateinamen an der Stelle in Ihrem Programm dar, an der er verwendet wird. Nicht in Strings interpoliert.
__LINIE__ Repräsentiert die aktuelle Zeilennummer. Nicht in Strings interpoliert.
__PAKET__ Stellt den aktuellen Paketnamen zur Kompilierungszeit dar oder undefiniert, wenn kein aktuelles Paket vorhanden ist. Nicht in Strings interpoliert.

Spezielle Variablen für reguläre Ausdrücke

$ digit Enthält den Text, der mit den entsprechenden Klammern im zuletzt übereinstimmenden Muster übereinstimmt. Zum Beispiel stimmt $ 1 mit dem überein, was im ersten Satz von Klammern im vorherigen regulären Ausdruck enthalten war.
$ & Die Zeichenfolge, die mit der letzten erfolgreichen Musterübereinstimmung übereinstimmt.
$ MATCH
$ ` Die Zeichenfolge vor allem, was mit der letzten erfolgreichen Musterübereinstimmung übereinstimmt.
$ PREMATCH
$ ' Die Zeichenfolge, die auf die letzte erfolgreiche Musterübereinstimmung folgt.
$ POSTMATCH
$ + Die letzte Klammer, die mit dem letzten Suchmuster übereinstimmt. Dies ist nützlich, wenn Sie nicht wissen, welches der alternativen Muster übereinstimmt. Zum Beispiel: / Version: (. *) | Revision: (. *) / && ($ rev = $ +);
$ LAST_PAREN_MATCH

Dateihandle Spezialvariablen

$ | Bei Einstellung ungleich Null wird nach jedem Schreiben oder Drucken auf dem aktuell ausgewählten Ausgangskanal ein Flush (3) erzwungen.
$ OUTPUT_AUTOFLUSH
$% Die aktuelle Seitenzahl des aktuell ausgewählten Ausgangskanals.
$ FORMAT_PAGE_NUMBER
$ = Die aktuelle Seitenlänge (druckbare Zeilen) des aktuell ausgewählten Ausgabekanals. Standard ist 60.
$ FORMAT_LINES_PER_PAGE
$ - Die Anzahl der Zeilen, die auf der Seite des aktuell ausgewählten Ausgangskanals verbleiben.
$ FORMAT_LINES_LEFT
$ ~ Der Name des aktuellen Berichtsformats für den aktuell ausgewählten Ausgabekanal. Standard ist der Name des Dateihandles.
$ FORMAT_NAME
$ ^ Der Name des aktuellen Seitenoberflächenformats für den aktuell ausgewählten Ausgabekanal. Standard ist der Name des Dateihandles, an das _TOP angehängt ist.
$ FORMAT_TOP_NAME