我需要知道如何从其他Perl文件中返回Perl文件的值。
在我的第一个文件中,我调用第二个文件,其句子类似于:
$variable = qx( perl file2.pl --param1 $p1 --param2 $p2);
我已尝试使用exit并返回以获取此数据但不可能。
有什么想法吗?
谢谢大卫。
答案 0 :(得分:2)
进程不是子程序。
进程之间的通信(“IPC”)主要通过普通文件句柄完成。这样的文件句柄可以具体为
每个进程还有一个退出代码。此代码为成功为零,非零表示失败。代码可以是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 ...