2012-11-16 53 views

回答

2

有可能是一個更好的方式來完成不管它是你正在試圖做的,但你可以用類似

{ 
    local @_ = ("passed parameter"); 
    require "tmp2.pl"; 
} 

實現當前的子目標,我會在我想跑的地方考慮這個成語perl腳本中的perl腳本。也就是說,我可以說

{ 
    local @ARGV = ("foo","bar"); 
    require "my_script.pl"; 
} 

,而不是

system("perl","my_script.pl","foo","bar"); 

(有大量的這兩個電話之間的微妙和不那麼微妙的差異,所以在很大程度上取決於什麼「特色」這些電話你需要)

4

據我所知,require不能用於發送的參數。但我認爲這是一件好事,因爲我想不出你應該想要的理由。在我看來,你的設計是錯誤的。

tmp2.pl應該是:

  • 一個獨立perl程序,你應該與systemqx()
  • 運行的模塊,具有可選的導出標記等
  • 其中定義了一類的包裝

但這只是我的想法....

0

是的,我認爲這應該工作。使用「require」來包含腳本。之後,您可以通過調用子函數來傳遞參數。修改後的腳本可以

require "tmp2.pl" ;
subfunc(parameter);
print @_;

0

假設要執行其他程序並捕獲它的輸出我偏愛使用IPC ::運行模塊。

#!/usr/bin/perl 

use strict; 
use warnings; 
use IPC::Run qw(run); 

run([ './tmp2.pl', @ARGV ], \'', \my $out, \my $err); 

print "out: $out\n"; 
print "err: $err\n"; 
相關問題