Какой предпочитаемый кроссплатформенный модуль IPC Perl?

Я хочу создать простой объект ввода-вывода, который представляет канал, открытый для другой программы, который я могу периодически записывать в STDIN другой программы во время работы моего приложения. Я хочу, чтобы он был пуленепробиваемым (в том смысле, что он ловит все ошибки) и кроссплатформенным. Лучшие варианты, которые я могу найти:

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

Преимущества:

Cross-platform Simple

Недостатки

No $SIG{PIPE} to catch errors from the piped program Are other errors caught? IO::Pipe
<code>sub io_read {
    IO::Pipe->reader(@_);
}
</code>

Преимущества:

Simple Returns an IO::Handle object for OO interface Supported by the Perl core.

Недостатки

Still No $SIG{PIPE} to catch errors from the piped program Not supported on Win32 (or, at least, its tests are skipped) IPC::Run

В IPC :: Run нет интерфейса для записи в дескриптор файла, только добавление в скаляр. Это кажется странным.

IPC::Run3

Здесь нет интерфейса дескриптора файла. Я мог бы использовать ссылку на код, которая будет вызываться повторно для спулинга дочернему элементу, но, глядя на исходный код, кажется, что он фактически записывает во временный файл, а затем открывает его и спулингируетits содержимое в трубу 'd команды'STDIN, Wha?

IPC::Cmd

Все еще нет интерфейса дескриптора файла.

Что мне здесь не хватает? Кажется, что это должно быть решенной проблемой, и я немного ошеломлен, что это не так. IO :: Труба ближе всего подходит к тому, что я хочу, но отсутствие$SIG{PIPE} Обработка ошибок и отсутствие поддержки Windows беспокоит. Где находится модуль трубопровода, который будет JDWIM?

Ответы на вопрос(2)

Ваш ответ на вопрос