perlvar - Vordefinierte Variablen in PetaPerl
BESCHREIBUNG
Dieses Dokument beschreibt die speziellen Variablen, die von PetaPerl unterstuetzt werden. Die vollstaendige Perl-5-Dokumentation findet sich unter perldoc perlvar.
SPEZIELLE VARIABLEN
Allgemeine Variablen
$_ - Die Standardvariable
Der voreingestellte Eingabe- und Mustersuchraum. Viele Funktionen operieren auf $_, wenn kein Argument angegeben wird.
for (1, 2, 3) {
print; # gibt $_ implizit aus
}
$_ = "hello";
print length; # gibt 5 aus
Implementierung: src/runtime/pp/globals.rs:95
@_ - Unterprogramm-Argumente
Innerhalb eines Unterprogramms enthaelt @_ die an dieses Unterprogramm uebergebenen Argumente.
Das Aendern von Elementen in @_ aendert die Variablen des Aufrufers (Aliasing).
sub double {
$_[0] *= 2; # aendert die Variable des Aufrufers
}
my $x = 5;
double($x);
print $x; # gibt 10 aus
Implementierung: src/runtime/pp/sub.rs
Globale Spezialvariablen
$0 - Programmname
Enthaelt den Namen des ausgefuehrten Programms.
print "Ausfuehrung: $0\n";
$$ - Prozess-ID
Die Prozess-ID des Perl-Prozesses, der dieses Skript ausfuehrt.
print "PID: $$\n";
$? - Fehlerstatus des Kindprozesses
Der Rueckgabestatus des letzten pipe-close-, Backtick-Befehls oder system()-Aufrufs.
system("false");
print "Exit-Status: ", $? >> 8, "\n";
$@ - Eval-Fehler
Die Fehlermeldung des letzten fehlgeschlagenen eval.
eval { die "oops" };
print "Fehler: $@" if $@;
$! - Betriebssystemfehler
Im numerischen Kontext liefert diese Variable den aktuellen Wert von errno.
Im Zeichenkettenkontext liefert sie die zugehoerige Fehlermeldung.
open(my $fh, '<', '/nonexistent') or print "Fehler: $!\n";
E/A-Variablen
$/ - Eingabe-Datensatztrennzeichen
Das Eingabe-Datensatztrennzeichen, standardmaessig ein Zeilenumbruch. Wird es auf undef gesetzt, wird der Slurp-Modus aktiviert.
{
local $/; # Slurp-Modus
my $content = <$fh>;
}
{
local $/ = ""; # Absatzmodus
while (<$fh>) { ... }
}
$\ - Ausgabe-Datensatztrennzeichen
Wird am Ende jedes print-Aufrufs angehaengt. Standardwert ist undef (nichts wird angehaengt).
{
local $\ = "\n";
print "line1"; # gibt "line1\n" aus
print "line2"; # gibt "line2\n" aus
}
$, - Ausgabe-Feldtrennzeichen
Wird zwischen den Argumenten von print ausgegeben. Standardwert ist undef.
{
local $, = ", ";
print "a", "b", "c"; # gibt "a, b, c" aus
}
$" - Listentrennzeichen
Wird verwendet, wenn Arrays in Zeichenketten interpoliert werden. Standardwert ist ein Leerzeichen.
my @arr = (1, 2, 3);
print "@arr\n"; # gibt "1 2 3" aus
{
local $" = ",";
print "@arr\n"; # gibt "1,2,3" aus
}
$| - Automatisches Leeren der Ausgabe
Wenn auf einen Wert ungleich Null gesetzt, wird nach jedem Schreibvorgang auf dem aktuell ausgewaehlten Ausgabekanal ein Flush erzwungen. Standardwert ist 0.
$| = 1; # Autoflush auf STDOUT aktivieren
$. - Aktuelle Zeilennummer
Die aktuelle Zeilennummer des zuletzt gelesenen Dateihandles.
while (<$fh>) {
print "$.: $_"; # gibt Zeilennummer und Inhalt aus
}
$; - Index-Trennzeichen
Das Index-Trennzeichen fuer die Emulation mehrdimensionaler Hashes. Standardwert ist "\034" (SUBSEP).
$hash{$x, $y} = $value; # aequivalent zu $hash{"$x\034$y"}
$^T - Startzeit
Der Zeitpunkt, zu dem das Programm gestartet wurde, in Sekunden seit der Epoche.
print "Gestartet um: ", scalar localtime($^T), "\n";
$^W - Warnungs-Flag
Der aktuelle Wert des Warnungsschalters. Wird durch -w gesetzt.
$^W = 1; # Warnungen aktivieren
Variablen fuer regulaere Ausdruecke
$& - Trefferzeichenkette
Die Zeichenkette, die vom letzten erfolgreichen Musterabgleich gefunden wurde.
"hello world" =~ /wo\w+/;
print $&; # gibt "world" aus
$` - Zeichenkette vor dem Treffer
Die Zeichenkette vor dem, was vom letzten erfolgreichen Musterabgleich gefunden wurde.
"hello world" =~ /wo\w+/;
print $`; # gibt "hello " aus
$' - Zeichenkette nach dem Treffer
Die Zeichenkette nach dem, was vom letzten erfolgreichen Musterabgleich gefunden wurde.
"hello world!" =~ /wo\w+/;
print $'; # gibt "!" aus
$1, $2, … - Erfassungsgruppen
Enthalten den Text, der von den Erfassungsgruppen des letzten Musterabgleichs gefunden wurde.
"hello world" =~ /(\w+) (\w+)/;
print "$1, $2\n"; # gibt "hello, world" aus
%+ - Benannte Erfassungen
Hash mit dem Text, der von benannten Erfassungsgruppen gefunden wurde.
"hello world" =~ /(?<first>\w+) (?<second>\w+)/;
print "$+{first}, $+{second}\n"; # gibt "hello, world" aus
Prozessvariablen
$< - Reale UID
Die reale Benutzer-ID dieses Prozesses.
print "Reale UID: $<\n";
$> - Effektive UID
Die effektive Benutzer-ID dieses Prozesses.
print "Effektive UID: $>\n";
$( - Reale GID
Die reale Gruppen-ID dieses Prozesses.
print "Reale GID: $(\n";
$) - Effektive GID
Die effektive Gruppen-ID dieses Prozesses, gefolgt von ergaenzenden Gruppen-IDs.
print "Effektive GID: $)\n";
Systemvariablen
%ENV - Umgebungsvariablen
Hash mit den aktuellen Umgebungsvariablen.
print $ENV{HOME};
$ENV{MY_VAR} = "value";
@ARGV - Kommandozeilenargumente
Enthaelt die an das Skript uebergebenen Kommandozeilenargumente.
# script.pl arg1 arg2
print "Argumente: @ARGV\n"; # gibt "Argumente: arg1 arg2" aus
@INC - Suchpfad fuer Module
Liste der Verzeichnisse, die bei use- und require-Anweisungen durchsucht werden.
push @INC, '/my/lib/path';
%SIG - Signal-Handler
Hash zum Setzen von Signal-Handlern.
$SIG{INT} = sub { die "SIGINT abgefangen" };
Versionsvariablen
$] - Perl-Version (numerisch)
Die Versionsnummer des Perl-Interpreters als Dezimalzahl.
print $]; # z.B. 5.042000
$^V - Perl-Version (Zeichenkette)
Die Perl-Version als Versionszeichenkette.
print $^V; # z.B. v5.42.0
$^O - Betriebssystem
Der Name des Betriebssystems.
print $^O; # "linux" fuer PetaPerl
$^X - Pfad zur Perl-Programmdatei
Der Pfad zur ausfuehrbaren Perl- (oder PetaPerl-)Datei.
print $^X; # z.B. /usr/local/bin/pperl
PetaPerl-spezifische Variablen
Reserviert fuer zukuenftige PetaPerl-spezifische Erweiterungen.