2011-01-27 54 views
0

以下是我想在Perl中完成的設計:Perl - 主腳本調用子腳本和返回狀態

主腳本調用多個子腳本。主腳本以特定順序控制每個子腳本的調用,並記錄每個子腳本的輸出,以決定是否不調用下一個腳本。

目前,我有一個使用system()調用來調用子腳本的主腳本,但是我無法使子腳本向主腳本傳回狀態。

不想使用子功能,真的想保持每個子腳本代碼分開。

爲了更好地闡明問題: 子腳本應該決定向主腳本報告什麼。例如:當子腳本在數據庫中發現字符串值時,子腳本發送代碼1,當子字符串找不到要查找的文件時,它會發送代碼2,並在一切正常時發送代碼0。

+2

雖然不是一個問題的答案,你可能想在這裏考慮您的實現。你可以做同樣的事情,但更強大,更少的內存,沒有系統調用,如果你使用模塊的不同功能。你可以讓每個模塊都有你需要的功能或行爲。對於那些「需要保持獨立的腳本」,你可以在該模塊周圍有一個調用模塊方法的包裝腳本。然後,對於這個「主」腳本,您只需使用所有模塊並調用其中每個模塊的函數,並將結果作爲變量傳遞而不是返回值。 – 2011-01-27 22:21:25

+0

是的,最終我肯定會走這條路,是否有一個很好的資源,您可以指示我在perl中瞭解有關「modules」的更多信息? – Chris 2011-01-27 22:28:34

+0

http://perldoc.perl.org/perlmod.html。另外,這裏有幾個OO教程:http://perldoc.perl.org/index-tutorials.html – DVK 2011-01-28 04:07:55

回答

4

你不能只用exit這個代碼嗎?

my $code = system('perl', '-e', 'exit 2;') >> 8; # $code = 2 
say "\$code=$code"; 

退出代碼可以是255個不同值。

0

您可以使用反引號語法執行並捕獲系統命令的輸出。

# get result as scalar 
$result = `ls -lA`; 

# get the result as an array, each line of output is a separate array entry 
@result = `ls -lA`; 

每當你使用反引號語法,命令的退出狀態也存儲在自動變量$?

然後,您可以有主腳本決定是否輸出是好還是不使用任何邏輯你需要。