2

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

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

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

4

1 回答 1

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!
于 2013-08-15T03:38:04.917 回答