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

如何从perl脚本中调用的perl脚本中获取变量?,perl,export,environment-variables,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需要b.pl中的$aa和$bb的值 我做了研究,发现有人说在b.pl中使用“Exporter”或将$aa和$bb设置为$ENV 然而,经过一些试验,我没能完成它 有人能帮忙吗?谢谢。当您通过系统调用它时,您正在调用一个子流程。你不能从中得到任何不通过管道的东西,比如

我有两个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需要b.pl中的$aa和$bb的值

我做了研究,发现有人说在b.pl中使用“Exporter”或将$aa和$bb设置为$ENV

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

有人能帮忙吗?谢谢。

当您通过系统调用它时,您正在调用一个子流程。你不能从中得到任何不通过管道的东西,比如stdout


您可能想做的是。'/b.pl;相反更好的是,将b.pl放入b.pm,设置其包,然后您可以要求b;并通过其包访问其全局文件。

如果出于任何原因需要作为两个应用程序执行此操作,而不是在应用程序中使用或需要另一个perl脚本,则可以将结果从b.pl打印到STDOUT

print join('|', $aa, $bb);
然后在a.pl中读取并拆分它

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

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

如果写入的b.pl没有本地声明的变量,因此没有使用警告,请使用strict,no my$aa,您可以将文件读入变量并对其求值。否则,如果不修改b.pl,这是不可能的。有几件事是可能的:

按照前面的提示使用ENV 在b.pl退出之前在标准输出上打印$aa和$bb,阅读a.pl中的内容 使用一些众所周知的方法管道、套接字、tempfile 将b.pl的逻辑移到某个单独的模块,包括b.pl和a.pl中的模块