Хотя с тех пор это было исправлено, open3
из 5.8.4 может выдать исключение от дочернего элемента, что означает, что и родитель, и дочерний элемент могут "возвращаться" из open3
.
Пока выможет с этим справиться, это немного сложно. * Было бы проще заменить ваш IPC/Open3.pm
на один от более нового Perl.
Еще лучше, если вам что-то не нужнона низком уровне, как IPC :: Open3, вы можете использовать модуль более высокого уровня, такой как IPC :: Run3 (проще) или IPC :: Run (более мощно).
* - как минимум,
my $parent_pid = $$;
my $pid = eval { open3(...) };
if (!$pid) {
if ($parent_pid == $$) {
# Exception in parent.
die($@);
} else {
# Exception in child (pre-exec).
print STDERR $@;
_exit(255);
}
}