2014-09-26 111 views
0

所有Shell命令裏面的Perl腳本

我有以下shell命令工作按上殼預期,但不工作裏面的perl調用

Shell命令時:

grep -P -s -irl --include \*.v "\s+hello\s?[(].*" <PATH> 

做工精細

Perl內部:

$inst_search = `grep -P -s -irl --include \*.v "\s+$inst\s?[(].*" @plt_dirs`; 

無法正常工作

我懷疑我在grep裏面缺少正則表達式的東西。請糾正我!

感謝, 維韋克

+0

檢查此...如果這可以幫助您:http://stackoverflow.com/questions/3200801/how-can-i-call-a-shell-command-in-my-perl-script – Praveen 2014-09-26 09:46:48

+0

Perl有一個內置的'grep'。我建議使用它而不是shell轉義。 – Sobrique 2014-09-26 09:54:00

+0

@Praveen:它被發現有用,並解決我的問題..謝謝! – 2014-09-28 06:39:55

回答

0

當使用字符串調用exec/system/qx(或反引號)時,Perl將轉義特殊的外殼字符。

嘗試使用exec或系統函數,但傳遞一個列表,例如

system('grep', '-P', '-s', '-irl', '--include', '\*.v', '"\s+hello\s?[(].*"', @plt_dirs); 

您可能還想看看爲您執行一些錯誤處理的模塊,如IPC :: System :: Simple。

0

試試這個:

$inst_search = qx#grep -P -s -irl --include \*.v "\s+$inst\s?[(].*" @plt_dirs#; 

或爲引用使用任何其他非字母數字字符,而不是"#"