Perl 如何获得像IPC::Run3打开的管道那样的流式效果?

Perl 如何获得像IPC::Run3打开的管道那样的流式效果?,perl,stdin,io-redirection,Perl,Stdin,Io Redirection,给定以下代码,用户将看到它打印3次,一次一秒“Hello World!” #/bin/perl $| = 1; 使用特征“:5.10”; 严格使用; 使用警告; 使用常量PERL_SCRIPT=>'$|=1;foreach(0..3){说“世界!”;睡觉1}; 打开(my$h、'-|'、'/bin/perl'、'-wE',perl_SCRIPT())或死亡$!; 而(){ 打印“Hello$”; } 如何使用IPC::Run3实现同样的效果?注意,我不想要缓冲。我想让这个流 为什么我要使用IP

给定以下代码,用户将看到它打印3次,一次一秒“Hello World!”

#/bin/perl
$| = 1;
使用特征“:5.10”;
严格使用;
使用警告;
使用常量PERL_SCRIPT=>'$|=1;foreach(0..3){说“世界!”;睡觉1};
打开(my$h、'-|'、'/bin/perl'、'-wE',perl_SCRIPT())或死亡$!;
而(){
打印“Hello$”;
}
如何使用
IPC::Run3
实现同样的效果?注意,我不想要缓冲。我想让这个流


为什么我要使用
IPC::Run3
?我想将stdin指向
/dev/null
。而且,我不希望必须对另一个shell执行程序进行实际重定向。

首先,如果不需要在父级中使用STDIN,您可以将以下代码与现有代码一起使用

open(STDIN,'PERL_脚本],
\未定义,
子{打印“Hello$\[0]”;
如果要使用管道,可以使用以下方法:

使用IPC::运行qw(启动);
使用符号qw(gensym);
我的$h=
开始[$^X,-wE=>PERL\u脚本],
\未定义,
“>管道”,my$pipe=gensym;
打印“Hello$\”的同时;
$h->finish();

(您不能使用
run
,因为这会等待孩子完成。)

更新了我的答案。
#!/bin/perl
$| = 1;
use feature ':5.10';
use strict;
use warnings;

use constant PERL_SCRIPT => '$|=1; foreach (0..3) {say "World!"; sleep 1}';

open ( my $h, '-|', '/bin/perl', '-wE', PERL_SCRIPT() ) or die $!; 
while (<$h>) {
  print "Hello $_";
}