# Spezielle Variablen

- Einführung
- Die Variable `$_`
- Allgemeine Informationen
- PID,UID,GID
- Fehlermeldungen
- Weitere spezielle Variablen

## Einführung

Es gibt in Perl einige reservierte Variablen, die Informationen über aktuelle Einstellungen geben und die auch dazu verwendet werden können, einige dieser Einstellungen zu verändern, indem die Variablen entsprechend gesetzt werden.

Verwendet man das Modul `English` der Standard-Bibliothek ("`use English;`"), so stehen auch begriffliche Namen dieser Variablen zur Verfügung (sie sind in der folgenden Liste in Klammern angegeben).

Anmerkung: Einige der Variablen liefern auf Nicht-UNIX-Betriebssystemen nicht unbedingt sinnvolle Werte (wenn überhaupt), falls die jeweils zugrundeliegende Funktion (z.B. Verwendung von Benutzer-IDs) nicht zur Verfügung steht.

[Seitenanfang]

## Die Variable `$_`

Wenn beispielsweise bei einem Funktionsaufruf der Rückgabewert nicht explizit einer Variablen zugewiesen wird, so wird er oft doch gespeichert, und zwar in der Variablen "`$_`". Auch können eine Reihe von Funktionen (die eigentlich ein Argument erwarten) ohne Argument aufgerufen werden - es wird dann stillschweigend der Inhalt von `$_` übergeben. `$_` ist also so etwas wie eine Variable, die temporär Daten aufnimmt, und es daher erlaubt, Funktionsaufrufe miteinander zu verketten, ohne jedesmal explizit Zuweisungen an Variablen vornehmen zu müssen, die sonst nirgendwo im Programm gebraucht werden.

Beispiel:

`#!/usr/local/bin/perl -w use strict; my $string = 'Hallo'; chop($string); print $string; print "\n"; $_ = 'Hallo'; chop($_); print $_; print "\n"; $_ = 'Hallo'; chop; print; print "\n";`

Während im ersten Teil eine Variable namens `$string` verwendet wird, um den Text zu speichern und die anschließenden Funktionsaufrufe durchzuführen, zeigt das zweite Beispiel, daß man als Variable genausogut `$_` verwenden kann. Der dritte Teil demonstriert, wie bei Aufruf der Funktion `chop()` ohne Argument standardmäßig der Inhalt von `$_` übergeben wird und das Ergebnis wiederum in `$_` landet. Schließlich wird der Inhalt von `$_` mit der Funktion `print()` (ebenso ohne Argument) ausgegeben.

Auch wenn im obigen Beispiel `$_` wie eine normale Variable verwendet wird, gibt es ein doch ein paar Unterschiede; so ist `$_` eine "echte" globale Variable, und sie läßt sich auch nicht mit `my()` in einer Subroutine lokalisieren.

Ein weiteres Beispiel:

`#!/usr/local/bin/perl -w use strict; my @array = ('a', 'b', 'c'); foreach (@array) { tr/a-z/A-Z/; print; }`

`ABC`

Da hier bei `foreach` keine Laufvariable angegeben ist, wird `$_` angenommen. `$_` erhält also nacheinander die Werte "a", "b" und "c". Im Inneren der Schleife wird die Funktion `tr` auf `$_` angewandt (ausführlich: `$_ =~ tr/a-z/A-Z/;`), die hier die Kleinbuchstaben von a bis z durch die entsprechenden Großbuchstaben ersetzt.

[Seitenanfang]

## Allgemeine Informationen

- `$0` (`$PROGRAM_NAME`)

  Name des gerade laufenden Programms

- `$]` (veraltet, siehe $^V ab Version 5.6!)

  Version des Perl-Interpreters (z.B. `5.008002` in Perl 5.8.2)

- `$^V` (`$PERL_VERSION`)

  Version des Perl-Interpreters (Achtung: `$^V` setzt sich aus den Symbolen mit den ASCII-Code-Werten der Versionsnummer zusammen, z.B. chr(5)chr(8)chr(2) in Perl 5.8.2)

- `$^O` (`$OSNAME`)

  Name des Betriebssystems

- `$^X` (`$EXECUTABLE_NAME`)

  Name des Perl-Interpreters

- `$^W` (`$WARNING`)

  Zeigt an, ob Warnungen ausgegeben werden sollen (z.B. durch die Option "`-w`").

- `$^T` (`$BASETIME`)

  Zeitpunkt, an dem das aktuelle Skript gestartet wurde (unter UNIX: Anzahl der Sekunden seit dem 1.1.1970)

[Seitenanfang]

## PID,UID,GID

- `$$` (`$PROCESS_ID`)

  Prozeß-Nummer von Perl

- `$<` (`$REAL_USER_ID`,`$UID`)

  Benutzer-ID, unter der der Prozeß gestartet wurde

- `$>` (`$EFFECTIVE_USER_ID`,`$EUID`)

  Benutzer-ID, unter der der Prozeß aktuell läuft (verschieden von `$<` im Falle von "Setuid"-Programmen)

- `$(` (`$REAL_GROUP_ID`,`$GID`)

  Liste der Gruppen des Benutzers, unter dem der Prozeß gestartet wurde

- `$)` (`$EFFECTIVE_GROUP_ID`,`$EGID`)

  aktuelle Liste der Gruppen des Benutzers (verschieden von `$(` im Falle von "Setgid"-Programmen)

[Seitenanfang]

## Fehlermeldungen

- `$?` (`$CHILD_ERROR`)

  Status-Nummer des letzten Systemaufrufs

- `$!` (`$OS_ERROR`,`$ERRNO`)

  Fehlerummer oder -meldung (je nach Kontext) des letzten Systemaufrufs

- `$@` (`$EVAL_ERROR`)

  Fehlermeldung des letzten `eval()`-Aufrufs

[Seitenanfang]

## Weitere spezielle Variablen

- `@_`

  Dieses Array enthält die an ein Unterprogramm übergebenen Argumente.

- `$[`

  Index des ersten Elements eines Arrays (Standardwert: 0)

  Diese Variable sollte (insbesondere ab Perl Version 5) nicht mehr verwendet werden, da dies bei Programmen, die aus mehreren Dateien (Modulen) bestehen, zu Problemen führen kann.

[Seitenanfang]

Autor: Eike Grote | Version: 2.02 (30.5.2005)