Hallo Alexander,
danke für Deine Tipps.
use strict und das -T werde ich einbauen, $ENV{'PATH'} werde ich mir auch noch ausgeben lassen, und das "undef" bei fork() werde ich ebenfalls noch prüfen. Das Ergebnis werde ich dann posten.
Der Hinweis wegen den Backticks ist sicherlich generell berechtigt, in meinem Fall werden aber keine Benutzereingaben eingefügt. Es soll ganz stupide ein und das selbe Programm ausgeführt werden, und der Dateiname der temporären Datei, auf die es zugreift, wird vom Skript bestimmt, und nicht vom Anwender.
* waitpid(-1) wartet auf alle Kindprozesse, nicht nur auf den gerade gestarteten. Das sollte hier eigentlich harmlos sein.
Wie kann ich das Skript denn auf genau den gerade gestarteten warten lassen?
* Der Rückgabewert von waitpid() ist nicht notwendigerweise -1, siehe perlfunc-Manpage.
So tief wollte ich eigentlich gar nicht in die Materie einsteigen. Meine Vorlage war dieses Beispiel aus selfhtml: http://de.selfhtml.org/perl/funktionen/systemaufrufe.htm#waitpid
Falls Du das Beispiel für so schlecht hältst - vielleicht könntest Du eine bessere Version davon einstellen, dann haben alle etwas davon?
* Die perlipc-Manpage dokumentiert unter "Safe Pipe Opens", wie sichere IPC mit einer Kopie des Prozesses oder auch mit einem anderen Prozess funktioniert. Das ist der offiziell empfohlene Weg, um I/O mit anderen Programmen zu machen.
Hm, ich *dachte* eigentlich, dass ich die Kommunikationsgeschichte auch aus einem selfhtml-Beispiel hatte, aber so spontan finde ich es nicht mehr.
Ich habe mir auf Deinen Rat hin mal http://www.ccsf.edu/Pub/Perl/perlipc/Safe_Pipe_Opens.html angeschaut, aber irgendwie schafft das bei mir eher noch mehr Verwirrung. :-(
Ich will doch einfach nur, dass mein Hauptprogramm eine sich wiederholende Wartemeldung ausgibt, bis der externe Befehl sein Ergebnis zurückgeliefert hat, und anschließend will ich dieses Ergebnis weiterverarbeiten. Ist das wirklich so schwer?
Gruß
Stefan