2009-10-07 68 views
-1

我想用Perl腳本來執行C程序。什麼輸入手動給C的可執行文件,這些應該由我的程序給出..如何在Perl中運行外部程序?

讓我們來看一個簡單的程序,它需要輸入兩個數字。並打印它的總和。 這些值應該由Perl腳本提供。

請通過一些教程指導我,我可以實現同樣的目標。如果你想捕捉從C程序的輸出在你的Perl腳本

system "my-c-program 1 2"; 

,然後使用反引號或qx// operator

回答

5

使用system功能

my $output = `my-c-program 1 2`; 

運行my-c-program 1 2和將標準輸出捕獲到新的$output變量中。

+0

我認爲OP想要調用的程序的輸出。 – 2009-10-07 10:44:19

+0

你需要引導我通過這個過程..因爲我是一個新手在這..或者分享一些很好的教程。 – AGeek 2009-10-07 10:49:27

-1

您可能在反引號引用機制之後執行外部程序並將其stdout作爲字符串返回。 例如

$date = `date` 
print $date; 

會在unix中打印「Wed Oct 7 12:50:33 CEST 2009」。然而,出於安全目的,這些論據必須進行脫殼處理,而且在某些情況下這可能會非常棘手 - 在大多數情況下,污染是一種方法。

我建議所有的初學者,直接進入了「系統」命令,直到他們意識到了反引號的安全隱患 - 如果是這種情況你應該採取@戴夫韓丁的建議

對於高級魔法你應該閱讀perlipc perldoc

+0

'system'和'qx //'做不同的事情。 「*直接進入'system'命令直到他們意識到反引號的安全含義*」這意味着什麼?順便說一句,'system'是一個函數。 – 2009-10-07 10:56:13

+1

這意味着初學者應該遠離反引號,直到他們瞭解shell逃脫。是的,你對系統是正確的。 – codehead 2009-10-07 11:11:29

5

那麼,如果你只是在學習如何在Perl中運行外部程序 - 請爲你自己一個忙,忘掉``。

與``的問題是你執行一個帶有參數的字符串 - 所以它必須被解析。這可能會導致用戶提供參數時出現問題。

如果您100%確定完全控制參數和命令名稱,您可以使用``,但對於任何其他情況 - 請考慮使用IPC::Run

它有點複雜,但它不需要任何參數解析使得更好。另外,您可以完全控制stdin,stdout和stderr執行的程序 - 包括將回調附加到它們!

+0

嗨先生..我的回答看起來有點有趣我..但它聽起來太多額外,, bcoz我不會清除sm術語..我怎麼可以通過perl腳本運行一個簡單的C程序..在執行期間,當C程序要求輸入時,perl應該提供該輸入。隨着時間推遲在B/W ... – AGeek 2009-10-09 06:31:05

+0

我還沒有理解你的評論??請再次寫清楚,如果可能的話...... Anywys thnkx。 – AGeek 2009-10-09 11:51:38