2013-04-26 64 views
1

我試圖用這樣的代碼:困惑Perl的IPC ::運行

run \@cmd, \$in, \$out, \$err; 

正如IPC::Run討論。

當然,這種抱怨未定義的變量。

於是我嘗試這個辦法:

my $in; 
my $out; 
my $err; 

run \@cmd, \$in, \$out, \$err; 

print $in "Hello World"; 

但隨後在print行我得到一個未定義的引用問題。

我做得完全錯誤的嗎?如果是這樣,我需要修改什麼?

+1

您沒有檢查'run'是否成功。事實上,你似乎並沒有真正通過一個命令。你是否想要捕獲'STDOUT'和'STDERR'? 這是一個相當模糊的問題。您應該擴展它以解釋您實際嘗試實現的內容。 – LeoNerd 2013-04-26 17:12:40

回答

1

在IPC的示例代碼::運行頁是假設你已經有了這些變量/聲明描述和設置其他地方,因此爲什麼一旦您設置了,它停止抱怨說。

打印到美元時,它不是一個有效的文件句柄會踢的錯誤。您希望將文件句柄從打印語句中移開,或者打開一個文件句柄到要寫入的文件,並將其傳遞給打印機。

請參見上打開的文檔的頁面和打印對這些功能的詳細信息:

http://perldoc.perl.org/functions/open.html

http://perldoc.perl.org/functions/print.html

另外,我強烈建議您使用嚴格和警告在你的Perl腳本,如果你並不是因爲它會爲你捕捉許多錯誤。

正如LeoNerd所提到的,如果您沒有設置數組@cmd來包含要運行的命令數組,那麼在該調用中沒有任何事情要執行。

如果您剛剛開始使用Perl並使用CPAN模塊,我強烈建議您也開始使用Data :: Dumper(在覈心Perl中,無需安裝即可使用它,只需將use Dumper;放在其他用途statments)來打印出你的變量,作爲調試代碼的一種方式,以便了解正在發生的事情。