Jaki jest preferowany wieloplatformowy moduł IPC Perl?

Chcę utworzyć prosty obiekt IO, który reprezentuje rurę otwartą na inny program, do której mogę okresowo zapisywać STDIN innego programu, gdy moja aplikacja działa. Chcę, żeby była odporna na pociski (ponieważ łapie wszystkie błędy) i wieloplatformowa. Najlepsze opcje, jakie mogę znaleźć to:

open
<code>sub io_read {
    local $SIG{__WARN__} = sub { }; # Silence warning.
    open my $pipe, '|-', @_ or die "Cannot exec $_[0]: $!\n";
    return $pipe;
}
</code>

Zalety:

MiędzyplatformowyProsty

Niedogodności

Nie$SIG{PIPE} złapać błędy z potokowanego programuCzy wykryto inne błędy?IO :: Pipe
<code>sub io_read {
    IO::Pipe->reader(@_);
}
</code>

Zalety:

ProstyZwraca obiekt IO :: Handle dla interfejsu OOObsługiwane przez rdzeń Perla.

Niedogodności

Nadal nie$SIG{PIPE} złapać błędy z potokowanego programuNieobsługiwane przez Win32 (lub przynajmniejjego testy są pomijane)IPC :: Uruchom

Nie ma interfejsu do zapisu do uchwytu pliku w IPC :: Run, tylko do skalara. To wydaje się… dziwne.

IPC :: Run3

Również tutaj nie ma interfejsu obsługi plików. Mógłbym użyć odwołania do kodu, które byłoby wielokrotnie wywoływane w celu buforowania do dziecka, ale patrząc na kod źródłowy, wygląda na to, że faktycznie zapisuje do pliku tymczasowego, a następnie otwiera go i buforujejego zawartość do polecenia rurySTDIN. Co?

IPC :: Cmd

Nadal nie ma interfejsu obsługi plików.

Czego mi tu brakuje? Wydaje się, że powinien to być problem rozwiązany, a ja jestem trochę oszołomiony, że tak nie jest. IO :: Pipe jest najbliżej tego, czego chcę, ale brak$SIG{PIPE} obsługa błędów i brak wsparcia dla Windows jest niepokojący. Gdzie jest moduł rurociągów, który będzie JDWIM?

questionAnswers(2)

yourAnswerToTheQuestion