2012-06-21 82 views
-1

我有两个Perl脚本a.plb.pl如何从perl脚本中调用的perl脚本获取变量?

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

b.pl它会做一些事情,然后分配一些值$aa$bb

现在在a.pl在它呼叫b.pl,a.pl需要值$aa$bbb.pl

我做了研究,发现人说,使用“出口”或设置$aa$bb是在$ENV b.pl

一些试验我没能完成它后然而。

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

回答

1

当你通过system调用它时,你正在调用一个子进程。你不能通过管道获得任何东西(比如标准输出)。

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

1

如果出于某种原因需要做到这两个应用程序,而非douserequire另一perl脚本的应用程序,那么你可以从b.pl将结果输出到标准输出

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

然后在a.pl阅读并把它分解

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

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

0

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

  • 使用ENV(如之前暗示)
  • 打印$ AA和BB $ stdout上b.pl出口之前,读那些a.pl
  • 使用一些公知的方法IPC(管道,套接字,临时文件)
  • 移动b.pl的逻辑到某些单独的模块,包括从b.pl和a.pl
该模块