我想在另一个perl程序child.pl
中调用perl程序parent.pl
,并希望将数据从child.pl
传递到parent.pl
并通过{{打印这些数据1}}。 parent.pl
可能不起作用,因为在system("perl child.pl")
完成之前,parent.pl将不会执行任何操作。我看了the online doc of perlipc,似乎child.pl
和pipe()
可以满足我的一些需求,但我找不到在fork()
之后将数据从子进程传递到父进程的方法。这是exec
的代码:
parent.pl
答案 0 :(得分:7)
这可能会有所帮助:
#!/usr/bin/perl
open (my $child, "-|","./child.pl") or die("$!");
while (<$child>) {
print "P: $_";
}
close($child);
打开功能,from perldoc:
对于三个或更多参数,如果MODE为| - ,则文件名为 解释为输出管道的命令,如果是MODE 是 - | ,文件名被解释为管道输出的命令 我们。
如果您不想触摸标准输出,那么您需要孩子的合作,然后您可以使用命名管道:
<强> parent.pl 强>
#!/usr/bin/perl
use strict;
use warnings;
use Fcntl;
use POSIX;
my $fpath = '.named.pipe';
mkfifo($fpath, 0666) or die "mknod $!";
system("perl child.pl &");
sysopen(my $fifo, $fpath, O_RDONLY) or die "sysopen: $!";
while (<$fifo>) {
print "P: $_";
}
close($fifo);
unlink($fifo);
<强> child.pl 强>
#!/usr/bin/perl
use strict;
use warnings;
use Fcntl;
use POSIX;
my $fpath = '.named.pipe';
sysopen(my $fifo, $fpath, O_WRONLY) or die "sysopen: $!";
print "screen hello\n";
print $fifo "parent hello\n";
close($fifo);