Perl - >如何返回qx(perl文件)的值

时间:2013-09-07 12:57:00

标签: perl return-value qx

我需要知道如何从其他Perl文件中返回Perl文件的值。

在我的第一个文件中,我调用第二个文件,其句子类似于:

$variable = qx( perl file2.pl --param1 $p1 --param2 $p2);

我已尝试使用exit并返回以获取此数据但不可能。

有什么想法吗?

谢谢大卫。

4 个答案:

答案 0 :(得分:2)

进程不是子程序。

进程之间的通信(“IPC”)主要通过普通文件句柄完成。这样的文件句柄可以具体为

  • STDIN和STDOUT,
  • 由父进程设置的管道,然后由子进程共享,
  • 插座

每个进程还有一个退出代码。此代码为成功为零,非零表示失败。代码可以是0-255范围内的任何整数。退出代码可以通过exit功能设置,例如exit(1),也由die设置。

使用STDIN和STDOUT是遵循Unix philosophy的命令行程序的正常操作模式。这允许它们通过管道链接到更复杂的程序,例如

cat a b c | grep foo | sort >out

这样的工具可以通过从ARGV或STDIN文件句柄读取并打印到STDOUT来实现在Perl中:

while (<>) {
  # do something with $_
  print $output;
}

然后,另一个程序可以将数据提供给该脚本,并从STDOUT中读取它。我们可以使用open将输出视为常规文件句柄:

use autodie;
open my $tool, "-|", "perl", "somescript.pl", "input-data"; # notice -| open mode
while (<$tool>) {
  ...
}
close $tool;

当您想要一个变量(标量或数组)中的所有输出时,可以使用qx作为快捷方式:my $tool_output = qx/perl somescript.pl input-data/,但这有两个缺点:一,执行shell进程解析命令(shell转义问题,效率低下)。二,输出仅在命令完成时可用。另一方面,使用open可以进行并行计算。

答案 1 :(得分:1)

file2.pl中,您必须向STDOUT提出print内容。例如:

print "abc\n";

答案 2 :(得分:1)

打印是解决方案。

对不起我的白痴问题!

答案 3 :(得分:0)

 $variable = system( perl file2.pl --param1 $p1 --param2 $p2);
 #$variable has return value of perl file2.pl ...