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

Eingebaute Funktionen

PetaPerl implementiert die eingebaute Funktionsbibliothek von Perl 5. Dieses Dokument listet alle implementierten Funktionen auf, nach Kategorien geordnet.

Legende:

  • ✅ Vollständig implementiert
  • ⚠️ Teilweise implementiert
  • ❌ Noch nicht implementiert

E/A-Funktionen

Ausgabeoperationen

FunktionStatusBeschreibung
printAusgabe auf Dateihandle oder STDOUT
sayAusgabe mit Zeilenumbruch
printfFormatierte Ausgabe
sprintfFormatierte Zeichenkette
print "Hello\n";
print $fh "data\n";
say "Hello";                    # Fuegt Zeilenumbruch hinzu
printf "%d Elemente\n", $count;
my $str = sprintf "%05d", $num;

Dateioperationen

FunktionStatusBeschreibung
openDatei oder Pipe oeffnen
closeDateihandle schliessen
readDaten fester Laenge lesen
sysreadLesen auf Systemebene
syswriteSchreiben auf Systemebene
readlineZeile(n) vom Dateihandle lesen
getcEinzelnes Zeichen lesen
eofAuf Dateiende pruefen
seekDateihandle positionieren
tellPosition des Dateihandles abfragen
filenoDateideskriptornummer abfragen
binmodeBinaermodus setzen
selectStandard-Dateihandle setzen
writeFormatierten Datensatz schreiben
open my $fh, '<', $filename or die $!;
my $data;
read $fh, $data, 1024;          # 1024 Bytes lesen
my $line = readline($fh);       # oder <$fh>
my $char = getc($fh);
seek $fh, 0, 0;                 # Zum Anfang zurueckspulen
my $pos = tell $fh;
close $fh;

Verzeichnisoperationen

FunktionStatusBeschreibung
opendirVerzeichnishandle oeffnen
readdirVerzeichniseintrag lesen
closedirVerzeichnishandle schliessen
rewinddirVerzeichnishandle zuruecksetzen
seekdirVerzeichnishandle positionieren
telldirVerzeichnisposition abfragen
mkdirVerzeichnis erstellen
rmdirVerzeichnis entfernen
chdirArbeitsverzeichnis wechseln
opendir my $dh, $dir or die $!;
my @entries = readdir $dh;
closedir $dh;

mkdir "newdir", 0755 or die $!;
rmdir "olddir";
chdir "/tmp";

Dateisystemoperationen

FunktionStatusBeschreibung
unlinkDateien loeschen
renameDatei umbenennen
linkHarten Link erstellen
symlinkSymbolischen Link erstellen
readlinkSymbolischen Link lesen
chmodDateiberechtigungen aendern
chownDateibesitzer/-gruppe aendern
utimeZugriffs-/Aenderungszeiten aendern
truncateDatei auf Laenge kuerzen
statDateistatus abfragen
lstatDateistatus abfragen (ohne Link-Verfolgung)
globDateinamenerweiterung
unlink "file.txt" or die $!;
rename "old.txt", "new.txt";
link "source", "link";
symlink "target", "symlink";
my $target = readlink "symlink";
chmod 0644, @files;
chown $uid, $gid, @files;
utime $atime, $mtime, @files;
truncate $fh, $length;
my @info = stat $file;
my @info = lstat $symlink;      # Folgt keinem Symlink
my @files = glob "*.txt";

Zeichenkettenfunktionen

FunktionStatusBeschreibung
lengthZeichenketten-/Array-Laenge
substrTeilzeichenkette extrahieren/ersetzen
indexPosition einer Teilzeichenkette finden
rindexTeilzeichenkette finden (rueckwaerts)
chrZahl in Zeichen umwandeln
ordZeichen in Zahl umwandeln
lcZeichenkette in Kleinbuchstaben
ucZeichenkette in Grossbuchstaben
lcfirstErstes Zeichen in Kleinbuchstaben
ucfirstErstes Zeichen in Grossbuchstaben
quotemetaMetazeichen quotieren
chopLetztes Zeichen entfernen
chompZeilenende entfernen
hexHexadezimale Zeichenkette in Zahl
octOktale Zeichenkette in Zahl
packWerte in Binaerzeichenkette packen
unpackBinaerzeichenkette entpacken
vecBitvektorzugriff
my $len = length $str;
my $sub = substr $str, 0, 5;    # Erste 5 Zeichen
substr($str, 7, 5) = "replace";  # Lvalue-substr
my $pos = index $str, "find";
my $rpos = rindex $str, "last";

my $char = chr(65);              # "A"
my $code = ord("A");             # 65

my $lower = lc "HELLO";          # "hello"
my $upper = uc "hello";          # "HELLO"
my $cap = ucfirst "hello";       # "Hello"

chomp $line;                     # Entfernt \n falls vorhanden
chop $str;                       # Entfernt letztes Zeichen
my $quoted = quotemeta '.*';     # '\\.\\\*'

my $num = hex "FF";              # 255
my $num = oct "377";             # 255

Lvalue-substr: substr kann als Zuweisungsziel verwendet werden.

substr($str, 0, 3) = "New";      # Ersetzt die ersten 3 Zeichen

Array-Funktionen

FunktionStatusBeschreibung
pushAn Array anhaengen
popLetztes Element entfernen
shiftErstes Element entfernen
unshiftVor Array stellen
spliceArray-Elemente entfernen/ersetzen
joinArray mit Trennzeichen verbinden
splitZeichenkette in Array aufteilen
reverseListe/Zeichenkette umkehren
sortListe sortieren
grepListe filtern
mapListe transformieren
push @arr, $val;
push @arr, @more;
my $last = pop @arr;
my $first = shift @arr;
unshift @arr, $val;

splice @arr, $offset, $length, @replacement;
my $str = join ",", @arr;
my @parts = split /,/, $str;
my @reversed = reverse @arr;
my @sorted = sort @arr;
my @sorted = sort { $a <=> $b } @numbers;
my @filtered = grep { $_ > 10 } @numbers;
my @doubled = map { $_ * 2 } @numbers;

Parallele Ausfuehrung: map, grep und einfache for-Schleifen koennen bei Unbedenklichkeit parallel ausgefuehrt werden.

Hash-Funktionen

FunktionStatusBeschreibung
keysHash-Schluessel abfragen
valuesHash-Werte abfragen
eachSchluessel-Wert-Paare iterieren
existsExistenz eines Schluessels pruefen
deleteHash-Schluessel entfernen
my @keys = keys %hash;
my @vals = values %hash;
while (my ($k, $v) = each %hash) { ... }
if (exists $hash{key}) { ... }
my $removed = delete $hash{key};

Kontextsensitivitaet: keys und values geben im Listenkontext eine Liste zurueck, im skalaren Kontext die Anzahl.

my $count = keys %hash;          # Anzahl der Schluessel
my @all_keys = keys %hash;       # Alle Schluessel

Mathematische Funktionen

FunktionStatusBeschreibung
absAbsolutwert
intGanzzahlige Abschneidung
sqrtQuadratwurzel
sinSinus
cosKosinus
expe hoch Potenz
logNatuerlicher Logarithmus
atan2Arkustangens von y/x
randZufallszahl
srandZufallsgenerator initialisieren
my $abs = abs -5;                # 5
my $int = int 3.7;               # 3
my $sqrt = sqrt 16;              # 4
my $sin = sin $angle;
my $cos = cos $angle;
my $exp = exp 1;                 # e
my $log = log 10;
my $atan = atan2 $y, $x;
my $rand = rand 10;              # 0 bis <10
srand 42;                        # Mit bestimmtem Wert initialisieren

Typ- und Referenzfunktionen

FunktionStatusBeschreibung
refReferenztyp abfragen
blessReferenz in Paket segnen
definedAuf Definiertheit pruefen
undefVariable undefinieren
scalarSkalaren Kontext erzwingen
my $type = ref $value;           # 'ARRAY', 'HASH', 'CODE' usw.
my $obj = bless {}, 'MyClass';
my $obj = bless $ref, 'MyClass';
if (defined $var) { ... }
undef $var;                      # Auf undef setzen
my $count = scalar @arr;         # Skalaren Kontext erzwingen

Steuerung und Introspektion

FunktionStatusBeschreibung
callerAufruferinformation abfragen
wantarrayAufrufkontext abfragen
prototypeUnterprogramm-Prototyp abfragen
posRegex-Position abfragen/setzen
studyRegex-Abgleich optimieren
resetVariablen zuruecksetzen
my ($package, $file, $line) = caller;
my ($pkg, $file, $line, $sub) = caller(1);
if (wantarray) {
    return @list;
} else {
    return $scalar;
}
my $proto = prototype \&mysub;
my $pos = pos $str;
study $str;                      # Fuer wiederholten Regex-Abgleich optimieren
reset;                           # ??-Suchen zuruecksetzen

Prozess und System

FunktionStatusBeschreibung
dieAusnahme ausloesen
warnWarnung ausgeben
exitProgramm beenden
systemExternen Befehl ausfuehren
execAusfuehren und Prozess ersetzen
forkKindprozess erzeugen
waitAuf Kindprozess warten
waitpidAuf bestimmten Kindprozess warten
sleepFuer Sekunden pausieren
timeAktuelle Unix-Zeit abfragen
timesProzesszeiten abfragen
localtimeZeit in Ortszeit umwandeln
gmtimeZeit in GMT umwandeln
getloginAnmeldenamen abfragen
die "Fehler: $!" if $error;
warn "Warnmeldung";
exit 0;

my $status = system "ls", "-l";
exec "command", @args;           # Kehrt bei Erfolg nicht zurueck
my $pid = fork;
if ($pid == 0) {
    # Kindprozess
} else {
    # Elternprozess
}
wait;                            # Auf beliebigen Kindprozess warten
waitpid $pid, 0;                 # Auf bestimmten Kindprozess warten

sleep 5;                         # 5 Sekunden pausieren
my $now = time;
my @times = times;               # (user, system, cuser, csystem)
my @lt = localtime time;
my @gmt = gmtime time;
my $user = getlogin;

Benutzer- und Gruppendatenbank

Alle Benutzer-/Gruppendatenbankfunktionen sind implementiert:

FunktionStatusBeschreibung
getpwnamPassworteintrag nach Name abfragen
getpwuidPassworteintrag nach UID abfragen
getpwentNaechsten Passworteintrag abfragen
setpwentPasswort-Iteration zuruecksetzen
endpwentPasswort-Iteration beenden
getgrnamGruppeneintrag nach Name abfragen
getgrgidGruppeneintrag nach GID abfragen
getgrentNaechsten Gruppeneintrag abfragen
setgrentGruppen-Iteration zuruecksetzen
endgrentGruppen-Iteration beenden
my @pwinfo = getpwnam "username";
my @pwinfo = getpwuid $uid;
while (my @entry = getpwent) { ... }
endpwent;

my @grinfo = getgrnam "groupname";
my @grinfo = getgrgid $gid;

Netzwerkdatenbank

Alle Netzwerkdatenbankfunktionen sind implementiert:

FunktionStatusBeschreibung
gethostbynameHost nach Name abfragen
gethostbyaddrHost nach Adresse abfragen
gethostentNaechsten Hosteintrag abfragen
sethostentHost-Iteration zuruecksetzen
endhostentHost-Iteration beenden
getnetbynameNetzwerk nach Name abfragen
getnetbyaddrNetzwerk nach Adresse abfragen
getnetentNaechsten Netzwerkeintrag abfragen
setnetentNetzwerk-Iteration zuruecksetzen
endnetentNetzwerk-Iteration beenden
getprotobynameProtokoll nach Name abfragen
getprotobynumberProtokoll nach Nummer abfragen
getprotoentNaechsten Protokolleintrag abfragen
setprotoentProtokoll-Iteration zuruecksetzen
endprotoentProtokoll-Iteration beenden
getservbynameDienst nach Name abfragen
getservbyportDienst nach Port abfragen
getserventNaechsten Diensteintrag abfragen
setserventDienst-Iteration zuruecksetzen
endserventDienst-Iteration beenden
my @host = gethostbyname "example.com";
my @net = getnetbyname "loopback";
my @proto = getprotobyname "tcp";
my @serv = getservbyname "http", "tcp";

Tie-Mechanismus

FunktionStatusBeschreibung
tie⚠️Variable an Objekt binden (Stub – gibt undef zurueck)
tied⚠️Gebundenes Objekt abfragen (Stub – gibt undef zurueck)
untie⚠️Variable entbinden (Stub – keine Wirkung)

Die Funktionen werden erkannt und sind aufrufbar, leiten aber nicht an Tie-Klassenmethoden weiter. Module, die auf tie angewiesen sind (z.B. Tie::File), funktionieren nicht korrekt.

Formate (veraltet)

FunktionStatusBeschreibung
formline⚠️Zeile formatieren (Stub)
write⚠️Formatierte Ausgabe schreiben (Stub)

Perl-Formate sind ein veraltetes Feature. Die Funktionen existieren, aber das Formatausgabesystem ist nicht implementiert. Verwende stattdessen printf/sprintf.

Socket-Funktionen

Alle Socket-Operationen sind implementiert:

FunktionStatusBeschreibung
socketSocket erstellen
socketpairSocket-Paar erstellen
bindSocket an Adresse binden
listenAuf Socket lauschen
acceptVerbindung annehmen
connectMit Gegenstelle verbinden
shutdownSocket herunterfahren
sendDaten senden
recvDaten empfangen
getsockoptSocket-Option abfragen
setsockoptSocket-Option setzen
getsocknameLokale Adresse abfragen
getpeernameEntfernte Adresse abfragen

IPC-Funktionen

FunktionStatusBeschreibung
pipePipe erstellen
msgctlNachrichtenwarteschlangensteuerung
msggetNachrichtenwarteschlange abfragen
msgsndNachricht senden
msgrcvNachricht empfangen
semctlSemaphorsteuerung
semgetSemaphorsatz abfragen
semopSemaphoroperationen
shmctlGemeinsamer-Speicher-Steuerung
shmgetGemeinsamen Speicher abfragen
shmreadGemeinsamen Speicher lesen
shmwriteGemeinsamen Speicher schreiben

Bekannte Einschraenkungen

Regulaere Ausdruecke

  • qr// ist vollstaendig implementiert einschliesslich Wiederverwendung vorkompilierter Muster
  • (?{code}) eingebettete Codeausfuehrung ist implementiert
  • Possessive Quantifizierer (*+, ++, ?+) sind implementiert
  • Siehe Regulaere Ausdruecke fuer verbleibende Randfaelle (selbstreferenzierende Erfassungen, Mehrzeichenfaltung bei Gross-/Kleinschreibung)

Modulsystem

  • use und require funktionieren fuer Pure-Perl-Module
  • XS-Module werden nicht unterstuetzt (native Neuimplementierungen fuer gaengige Module vorhanden)
  • Einige Pragma-Auswirkungen koennen von perl5 abweichen

Spezielle Variablen

  • Die meisten speziellen Variablen werden befuellt ($^O, $^X, $], $^V usw.)
  • Internals::SvREADONLY ist nicht implementiert

PetaPerl-spezifische Hinweise

Konstantenfaltung

PetaPerl fuehrt Konstantenfaltung zur Uebersetzungszeit durch fuer:

length("hello")      # Wird zur Uebersetzungszeit zu 5 gefaltet
substr("text", 0, 2) # Wird zu "te" gefaltet

Parallele Ausfuehrung

Diese Funktionen koennen bei Unbedenklichkeit parallel ausgefuehrt werden:

  • map - Parallele Elementtransformation
  • grep - Parallele Filterung
  • sort mit reiner Vergleichsfunktion

Parallelisierung erfordert:

  • Keine Seiteneffekte im Callback
  • Keinen gemeinsam veraenderbaren Zustand
  • Array-Groesse ueber der Parallelisierungsschwelle

Leistung

  • Zeichenkettenfunktionen verwenden UTF-8-bewusste Operationen
  • Array-Operationen minimieren Kopien
  • Hash-Operationen verwenden optimierte Hashtabellen
  • Mathematische Funktionen werden wenn moeglich auf CPU-Befehle abgebildet