-1

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

a.pl中,它通过调用b.plsystem("/usr/bin/perl ./b.pl");

b.pl 中,它会做一些事情,然后将一些值分配给$aaand$bb

现在在a.pl调用b.pl之后,a.pl需要 b.pl 的值$aa$bb来自b.pl的值。

我做了研究,发现人们说要使用“出口商”或设置$aa$bb加入$ENVb.pl

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

任何人都可以帮忙吗?谢谢。

4

3 回答 3

1

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

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

然后在a.pl中阅读并拆分它

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

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

于 2012-06-21T19:26:18.287 回答
1

当您通过 调用它时system,您正在调用一个子进程。您无法通过管道(例如标准输出)从中获得任何东西。

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

于 2012-06-21T19:19:38.487 回答
0

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

  • 使用 ENV(如前所述)
  • 在 b.pl 退出前在 STDOUT 上打印 $aa 和 $bb,读取 a.pl 中的内容
  • 使用一些著名的IPC方法(管道、套接字、临时文件)
  • 将 b.pl 的逻辑移动到某个单独的模块,包括来自 b.pl 和 a.pl 的模块
于 2012-06-21T19:27:33.190 回答