Mit Perl-Skripten Daten für UNIX-Anwendungen übernehmen

Um an externe Daten zu gelangen, gibt es in Perl drei Möglichkeiten:

  • Backticks
  • system() und exec()
  • open() und parsen

Wir wollen einen Blick auf diese drei Techniken werfen und uns ein umfangreicheres Beispiel mit open() und parsen anschauen.

Backticks

Die einfachste Methode für das Einlesen von Daten ist die Verwendung von Apostrophen, auch Backticks genannt. Unter UNIX weisen die Backticks (`) um einen Befehl die Shell an, diesen auszuführen. Wer schon einmal mit Shell-Skripten gearbeitet hat, wird wissen, wie das funktioniert. Setzen Sie einfach den vollständigen Pfad des auszuführenden Programms (einschließlich aller Argumente) in Apostrophe, und der Perl-Interpreter wird versuchen, diesen Befehl auszuführen. Perl wird alles, was der Befehl an die Standardausgabe STDOUT ausgibt, einer Variablen zuweisen. Um z.B. einen String mit dem aktuellen Datum zu erhalten, könnte Ihr Skript die folgende Zeile enthalten:


$date=`/usr/bin/date`;

Die Variable $date enthält nun einen Null-terminierten String mit dem aktuellen Datum. Die Variable $? (genau wie bei Shell-Skripten) enthält den Rückgabewert des letzten run-Befehls. Dies ist bei Weitem die einfachste Methode, an externe Daten zu gelangen, aber es funktioniert nur gut, wenn die Ausgabe einzeilig ist. Sollte der Output aus mehreren Zeilen bestehen, kann er mit einer Kombination aus split() und einer foreach-Schleife geparst werden, wie Listing A zeigt.

Dies ist schon um einiges weniger effizient als die vorige Methode. Auch die Fehlersuche ist bei der Verwendung von Backticks schwierig, da alle Fehlermeldungen von Systemfehlern (executable not found) bis zu anwendungsspezifischen Fehlern in der Output-Variablen gespeichert werden ($date in unserem Beispiel).

system() und exec()

Ein weiterer Ansatz nutzt die Funktionen system() oder exec(). Diese Funktionsaufrufe funktionieren fast genau so wie die POSIX system(2)- und exec(2)-Aufrufe, die man auf den meisten UNIX-Plattformen findet. Beide Funktionen erwarten den Namen einer ausführbaren Datei als erstes Argument, gefolgt von der Liste der an das externe Programm zu übergebenden Argumente.

Die exec()-Funktion gibt nur dann eine Fehlermeldung zurück, wenn sie das auszuführende Programm nicht findet, ignoriert aber den Output oder Rückgabewert des externen Programms. Die system()-Funktion wartet das Ende des externen Programms ab und gibt dann den Exit-Status des aufgerufenen Programms zurück. Alles, was das aufgerufene Programm an STDOUT gesendet hat, geht verloren. Dies ist eine nützliche Funktion, wenn man nicht daran interessiert ist, was das externe Programm an STDOUT geschickt hat. Will man dagegen diese Daten auswerten, ist unsere nächste Methode genau das Richtige.

open() und parsen

Die leistungsfähigste Methode für das Ausführen eines externen Prozesses ist das Öffnen einer Pipe zum externen Programm mit Perls open()-Funktion. Da open() erlaubt, den Output genau so zu lesen wie eine Datei, bietet dieses Vorgehen die größte Flexibilität.

Page: 1 2

ZDNet.de Redaktion

Recent Posts

Studie: Ein Drittel aller E-Mails an Unternehmen sind unerwünscht

Der Cybersecurity Report von Hornetsecurity stuft 2,3 Prozent der Inhalte gar als bösartig ein. Die…

10 Stunden ago

HubPhish: Phishing-Kampagne zielt auf europäische Unternehmen

Die Hintermänner haben es auf Zugangsdaten zu Microsoft Azure abgesehen. Die Kampagne ist bis mindestens…

1 Tag ago

1. Januar 2025: Umstieg auf E-Rechnung im B2B-Geschäftsverkehr

Cloud-Plattform für elektronische Beschaffungsprozesse mit automatisierter Abwicklung elektronischer Rechnungen.

1 Tag ago

Google schließt schwerwiegende Sicherheitslücken in Chrome 131

Mindestens eine Schwachstelle erlaubt eine Remotecodeausführung. Dem Entdecker zahlt Google eine besonders hohe Belohnung von…

1 Tag ago

Erreichbarkeit im Weihnachtsurlaub weiterhin hoch

Nur rund die Hälfte schaltet während der Feiertage komplett vom Job ab. Die anderen sind…

2 Tagen ago

Hacker missbrauchen Google Calendar zum Angriff auf Postfächer

Security-Experten von Check Point sind einer neuen Angriffsart auf die Spur gekommen, die E-Mail-Schutzmaßnahmen umgehen…

3 Tagen ago