我用以下命令从主脚本调用一个子脚本:
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!