¿Cuál es el módulo Perl de IPC multiplataforma preferido?

Quiero crear un objeto IO simple que represente una canalización abierta a otro programa para que pueda escribir periódicamente en el STDIN de otro programa mientras se ejecuta mi aplicación. Quiero que sea a prueba de balas (ya que captura todos los errores) y multiplataforma. Las mejores opciones que puedo encontrar son:

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

Ventajas:

MultiplataformaSencillo

Desventajas

No$SIG{PIPE} Para detectar errores del programa canalizado.¿Se detectan otros errores?IO :: Tubería
<code>sub io_read {
    IO::Pipe->reader(@_);
}
</code>

Ventajas:

SencilloDevuelve un objeto IO :: Handle para la interfaz OOApoyado por el núcleo de Perl.

Desventajas

Aún no$SIG{PIPE} Para detectar errores del programa canalizado.No es compatible con Win32 (o, al menos,sus pruebas se saltan)IPC :: Ejecutar

No hay una interfaz para escribir en un identificador de archivo en IPC :: Ejecutar, solo se agrega a un escalar. Esto parece ... raro.

IPC :: Run3

No hay interfaz de manejar el archivo aquí, tampoco. Podría usar una referencia de código, que se llamaría repetidamente para poner en cola al niño, pero mirando el código fuente, parece que en realidad escribe en un archivo temporal, y luego lo abre y lo pone en cola.sus contenido a la orden de la tuberíaSTDIN. Qa

IPC :: Cmd

Todavía no hay interfaz de manejar el archivo.

¿Que me estoy perdiendo aqui? Parece que esto debería ser un problema resuelto, y me sorprende que no lo sea. IO :: Pipe se acerca más a lo que quiero, pero la falta de$SIG{PIPE} el manejo de errores y la falta de soporte para Windows es angustiante. ¿Dónde está el módulo de tuberías que JDWIM?

Respuestas a la pregunta(2)

Su respuesta a la pregunta