2011-06-16 15 views
4

如何使用我的$opt變量執行Perl的qx函數?如何使用變量執行Perl qx函數

之前(的作品):

my @df_output = qx (df -k /tmp); 

我想請使用-k-g,或-H

my @df_output = qx (df -$opt /tmp); 
+1

當您嘗試此代碼時發生了什麼? – mob 2011-06-16 21:21:56

+0

'使用未初始化的值連接(。)或字符串在。/ tst.pl'。還有'df: - :沒有這樣的文件或目錄'。有趣的是,我仍然得到了工作成果,但有了這些消息。 – jdamae 2011-06-16 21:25:55

+4

這些意思是'$ opt'沒有定義。 – Eevee 2011-06-16 21:27:55

回答

7

你有什麼應該工作,:永遠不要使用qx。這是古老而危險的;無論您是否通過殼體進行操作,所以如果/bin/sh不是您所期望的,那麼容易受到殼體注射的影響或碰到意外。

使用open()的多參數形式,它完全繞過了shell。

open my $fh, '-|', 'df', "-$opt", '/tmp' or die "Can't open pipe: $!"; 
my @lines = <$fh>; # or read in a loop, which is more likely what you want 
close $fh or die "Can't close pipe: $!"; 
+0

'系統'怎麼樣? – jdamae 2011-06-16 21:20:49

+3

'system'返回退出狀態,而不是進程的stdout。但是它也支持一個安全的多參數形式,是的。 – Eevee 2011-06-16 21:21:49

+1

沒有人開始實施multi-arg open - |在Windows中,雖然:( – ikegami 2011-06-17 00:33:45

3

嘗試使用反斜槓\$opt,它的工作原理。

+0

這不能提供對該問題的回答。要評論或請求作者澄清,請在下面留言他們的帖子 - 你總是可以評論你自己的帖子,一旦你有足夠的[聲譽](http://stackoverflow.com/help/whats-reputation),你將能夠[評論任何帖子](http:///stackoverflow.com/help/privileges/comment) – IanAuld 2014-08-29 03:36:52

+2

@IanAuld。爲什麼這不是答案? – 2014-08-29 04:32:09