Perl - 使用系统1方法从孩子返回

时间:2013-08-15 03:28:18

标签: perl command

我正在使用以下命令从我的主脚本调用子脚本:

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

我想知道如何从上面的子代码返回一个值到我的主脚本? 有人可以帮忙吗?

1 个答案:

答案 0 :(得分:1)

您应该使用管道打开子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!