0

I need to know how is possible return values of Perl file from other Perl file.

In my first file i call to the second file with sentence similar to:

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

I have tried with exit and return to get this data but is not possible.

Any idea?

4

4 回答 4

2

进程不是子程序。

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

  • 标准输入和标准输出,
  • 由父进程设置的管道,然后由子进程共享,
  • 插座

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

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

cat a b c | grep foo | sort >out

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

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另一方面,使用允许您进行并行计算。

于 2013-09-07T13:15:05.537 回答
1

file2.pl中,您必须将某些内容打印到 STDOUT。例如:

print "abc\n";
于 2013-09-07T13:08:51.710 回答
1

打印是解决方案。

对不起我的白痴问题!

于 2013-09-09T07:43:41.997 回答
0

#

 $variable = system( perl file2.pl --param1 $p1 --param2 $p2);
 #$variable has return value of perl file2.pl ...
于 2013-09-07T14:32:16.213 回答