如何从perl脚本中调用的perl脚本中获取变量?

时间:2012-06-21 19:08:13

标签: perl export environment-variables

我有两个perl脚本 a.pl b.pl

a.pl 中,它按system("/usr/bin/perl ./b.pl");

调用 b.pl

b.pl 中,它会执行某些操作,然后将一些值分配给$aa$bb

现在在 a.pl 中调用 b.pl 后, a.pl 需要$aa和{的值{strong}来自 b.pl

我做了研究,发现有人说要使用'导出'或将$bb$aa设置为 b.pl

中的$bb

然而,经过一些试验,我没能完成它。

有人可以帮忙吗?感谢。

3 个答案:

答案 0 :(得分:1)

当您通过system调用它时,您正在调用子进程。你不能通过管道(例如stdout)获取任何东西。

你可能想要的是do './b.pl;代替。更好的是,将b.pl放入b.pm,设置它的包,然后你可以require b;并通过它的包访问它的全局变量。

答案 1 :(得分:1)

如果您出于某种原因需要将此作为两个应用程序而不是douserequire应用程序中的另一个perl脚本,那么您可以打印来自 b.pl 到STDOUT

print join('|', $aa, $bb);

然后在 a.pl 中读取并拆分

my ($aa, $bb) = split(/\|/, `/usr/bin/perl ./b.pl`);

如果您的$aa$bb可能包含字符|,请选择其他分隔符。

答案 2 :(得分:0)

如果b.pl是在没有本地声明的变量的情况下编写的(所以没有使用警告,使用strict,没有我的$ aa),你可以将文件读入变量并对其进行评估。否则,如果不修改b.pl,这是不可能的。一些可能的事情:

  • 使用ENV(如前所述)
  • 在退出b.pl之前在STDOUT上打印$ aa和$ bb,阅读a.pl中的那些
  • 使用一些众所周知的IPC方法(管道,套接字,临时文件)
  • 将b.pl的逻辑移动到某个单独的模块,包括来自b.pl和a.pl的模块