如何在Perl中通过管道连接进程?

时间:2018-07-31 08:07:46

标签: bash perl pipe

我想编写一个Perl脚本,该脚本运行程序foobar并处理stdout的{​​{1}}并将其发射到{{ 1}}以流式传输方式。 Perl脚本的行为应类似于以下foo命令:

stdin

我用下面的代码片段完成了第一部分。我启动程序bar并打开管道以读取bash

$ foo | some-perl-code | bar

我如何实现第二部分?如何在我的Perl脚本内 内向程序foo发出stdout

3 个答案:

答案 0 :(得分:6)

只需使用另一个开口,但恢复管道的方向:

open my $in,  '-|', 'foo' or die $!;
open my $out, '|-', 'bar' or die $!;
while ( my $row = <$in> ) {
    # do stuff
    print {$out} $row;
}

答案 1 :(得分:2)

另一种选择是使用IPC::Pipeline将流程链接在一起,而不是手动进行。

答案 2 :(得分:0)

IPC::Run也是另一个(有些令人生畏的)选项。如果最终遇到复杂的管道,我是否还可以推荐(无耻地提升自己的模块)IPC::PrettyPipe,它是我写来帮助渲染复杂管道的。