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

Neue Backdoor: Bedrohung durch Malvertising-Kampagne mit MadMxShell

Bisher unbekannter Bedrohungsakteur versucht über gefälschte IP Scanner Software-Domänen Zugriff auf IT-Umgebungen zu erlangen.

8 Stunden ago

BSI-Studie: Wie KI die Bedrohungslandschaft verändert

Der Bericht zeigt bereits nutzbare Angriffsanwendungen und bewertet die Risiken, die davon ausgehen.

1 Tag ago

KI-Wandel: Welche Berufe sich am stärksten verändern

Deutsche sehen Finanzwesen und IT im Zentrum der KI-Transformation. Justiz und Militär hingegen werden deutlich…

1 Tag ago

Wie ein Unternehmen, das Sie noch nicht kennen, eine Revolution in der Cloud-Speicherung anführt

Cubbit ist das weltweit erste Unternehmen, das Cloud-Objektspeicher anbietet. Es wurde 2016 gegründet und bedient…

1 Tag ago

Dirty Stream: Microsoft entdeckt neuartige Angriffe auf Android-Apps

Unbefugte können Schadcode einschleusen und ausführen. Auslöser ist eine fehlerhafte Implementierung einer Android-Funktion.

1 Tag ago

Apple meldet Umsatz- und Gewinnrückgang im zweiten Fiskalquartal

iPhones und iPads belasten das Ergebnis. Außerdem schwächelt Apple im gesamten asiatischen Raum inklusive China…

1 Tag ago