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

Lar*_*der 1 bash perl pipe

我想写它运行的程序的Perl脚本foo,并bar和流程stdoutfoo它发射到stdinbar以流方式.Perl脚本应该像这个bash命令一样:

$ foo | some-perl-code | bar
Run Code Online (Sandbox Code Playgroud)

我设法用下面的代码片段完成第一部分.我启动程序foo并打开管道阅读stdout.

open( my $pipe_fh, "foo |" );
while ( my $row = <$pipe_fh> ) {
   # do stuff
    print $row;
}
Run Code Online (Sandbox Code Playgroud)

我如何实现第二部分?如何 Perl脚本中$row向程序发出声音?bar

cho*_*oba 6

只需使用另一个打开,但还原管道的方向:

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