使用system1方法从子级返回Perl



我用以下命令从主脚本调用一个子脚本:

system 1, "perl C:\test.pl";

我想知道如何将上面的子项的值返回到我的主脚本中?有人能帮忙吗?

您应该使用管道打开子perl,并读取它打印到标准输出的内容:

open(F, "-|", 'perl C:test.pl') or die;
my $data = <F>;  # Gets one line of output.

要使用system,您必须自己设置管道或套接字连接,这有点复杂,或者使用文件传递数据。

一个显示父级和子级并行运行的小测试。在child.pl中,

# Simulate a long computation
for ('a'..'k') {
  print STDERR "$_ ";
  sleep 1;
}
# This goes to the pipe.
print "Hello world! ";

parent.pl中,

open(F, "-|", 'perl child.pl') or die;
# Child is running.  Do a long computation in the parent.
for (1..10) {
  print STDERR "$_ ";
  sleep 1
}
# Now get the final value from the child's pipe.
my $data = <F>;
print STDERR $data;
close F;

然后:

C:tmp>perl parent.pl
1 a 2 b 3 c 4 d 5 e 6 f 7 g 8 h 9 i 10 j k Hello world!

最新更新