Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

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.

SIEHE AUCH