Es ist hier ja nicht so, dass beim Starten des Subprozesses ein Fehler auftreten würde, folglich greift auch die Fehlerabfrage bei
open nicht.
Der Fehler tritt vielmehr erst später auf, während der Subprozess schon läuft. Um festzustellen, wann das passiert, sollte man auch nach
print und
close prüfen, ob diese I/O-Operationen erfolgreich waren, oder ob die Pipe bereits "tot" ist.
Wenn man ferner den Rückgabestatus des aufgerufenen Programmes abfragen will, muss man
IPC::Open2 oder
IPC::Open3 und
-f waitpid benutzen.
Wenn man auch die Fehlermeldung auf STDERR abfangen will, so geht das mit
IPC::Open3.
When C++ is your hammer, every problem looks like your thumb.