Ich sehe in dem Script einige Probleme:
* "use strict;" fehlt, dadurch verdeckt Perl Flüchtigkeitsfehler. Vor weiteren Versuchen, denn eigentlichen Fehler zu beheben, sollte das Script erst einmal auf strict umgestellt und alle von strict gemeldeten Probleme behoben werden.
* -T fehlt in der #!-Zeile. CGIs funktionieren auch ohne -T, aber mit -T wird die Katastrophenwahrscheinlichkeit deutlich kleiner.
* fork() hat drei mögliche Rückgabewerte, nicht nur zwei: 0 im Child, PID im Parent, undef bei Fehlern. Letzeres ist nicht berücksichtigt.
* Backticks (``) involvieren die Shell, das ist in CGIs insbesondere mit Eingaben vom Benutzer in der Regel nicht gewünscht, weil es fast immer riesige Sicherheitslöcher öffnet.
* waitpid(-1) wartet auf alle Kindprozesse, nicht nur auf den gerade gestarteten. Das sollte hier eigentlich harmlos sein.
* Der Rückgabewert von waitpid() ist nicht notwendigerweise -1, siehe perlfunc-Manpage.
* Es wird nirgendwo $ENV{'PATH'} gesetzt, das aufgerufene Programm wird aber auch nicht mit einer absoluten Pfadangabe aufgerufen. Welchen Wert hat $ENV{'PATH'} für vom Webserver gestartete CGIs? Welchen Wert hat $ENV{'PATH'} in der Benutzer-Shell? (-T hätte dieses Problem sofort gemeldet!)
* 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.
Alexander