如何讓一個 perl 腳本呼叫另一個 perl 腳本并獲得回傳結果?
我有 perl Script B,它做了很多資料庫作業,什么也不列印,只是以 0 或 3 退出。
所以我想 perl Script A 呼叫 Script B 并得到它的結果。但是當我打電話時:
my $result = system("perl importOrig.pl filename=$filename");
或者
my $result = system("/usr/bin/perl /var/www/cgi-bin/importOrig.pl filename=$filename");
我得到一個-1,并且永遠不會呼叫腳本B。
我已經除錯了腳本 B,手動呼叫時沒有故障。
所以很明顯我在上面的電話中犯了一個錯誤,并且不確定它是什么。
uj5u.com熱心網友回復:
有很多事情需要考慮。
Zeroth,有用于 InterProcess Communication的perlipc檔案。錯誤變數中的值是什么$!?
首先, use ,它是你正在執行的perl$^X的路徑。由于子行程繼承了您的環境,因此您希望使用相同的perl,這樣它就不會與等等混淆。PERL5LIB
system("$^X /var/www/cgi-bin/importOrig.pl filename=$filename")
其次,CGI 程式往往期望設定特定的環境變數,例如REQUEST_METHOD. 將它們稱為普通的命令列程式通常會忽略這些東西。嘗試從命令列運行程式,看看它是如何抱怨的。檢查它是否獲得了它想要的環境。您還可以檢查程式的權限,以查看您(或運行呼叫程式的任何用戶)是否被允許讀取它(或其目錄等)。你說沒有故障,所以也許這不是你的特殊問題。但是,這兩種環境是否以應有的方式匹配?
第三,考慮將第二個程式設為 modulino。您可以從命令列將其作為腳本正常運行,但您也可以將其作為 Perl 庫加載并直接使用其功能。這消除了所有 IPC 的東西。你甚至可以fork讓這些東西同時運行。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/464663.html
標籤:perl
