我想编写一个Perl脚本,该脚本运行程序foo
和bar
并处理stdout
的{{1}}并将其发射到{{ 1}}以流式传输方式。 Perl脚本的行为应类似于以下foo
命令:
stdin
我用下面的代码片段完成了第一部分。我启动程序bar
并打开管道以读取bash
。
$ foo | some-perl-code | bar
我如何实现第二部分?如何在我的Perl脚本内 内向程序foo
发出stdout
?
答案 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,它是我写来帮助渲染复杂管道的。