2012-06-21 103 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
該模塊