Perl的支持三種方式(即我所知道的)運行外部程序:Perl中的系統和反引號和管道有什麼區別?
system
:
system PROGRAM LIST
爲:
system "abc";
反引號,如:
`abc`;
通過管道運行:
open ABC, "abc|";
它們之間有什麼不同?以下是我所知道的:
- 您可以使用反引號和管道輕鬆獲取命令的輸出。
- 這就是它(更多未來的編輯?)
Perl的支持三種方式(即我所知道的)運行外部程序:Perl中的系統和反引號和管道有什麼區別?
system
:
system PROGRAM LIST
爲:
system "abc";
反引號,如:
`abc`;
通過管道運行:
open ABC, "abc|";
它們之間有什麼不同?以下是我所知道的:
反引號還會將執行的程序的STDOUT重定向到一個變量,並且系統會將它發送到主程序的STDOUT。
系統還返回應用程序的退出值(Windows中的ERRORLEVEL)。 管道使用起來有些複雜,因爲從中讀取數據並關閉它們會增加額外的代碼。 最後,他們有不同的實現,這是爲了做不同的事情。使用管道可以與執行的應用程序進行通信,而其他命令不允許(輕鬆)執行。
獲取程序退出狀態不限於system()
。當您撥打close(PIPE)
時,它會返回退出狀態,並且您可以從$?
獲得所有3種方法的最新退出狀態。
也請注意,
readpipe('...')
相同
`...`
你能完成這句話嗎? 請注意,readpipe('...')而不是...。 – 2009-04-28 18:13:57
的perlipc文檔解釋了,你可以利用Perl等流程交互的各種方式,並perlfunc's open documentation解釋了管道文件句柄。
還有一些模塊可以處理跨平臺邊緣案例的這些細節。
管道是反引號的更細粒度控制。反引號返回STDOUT,如:$ date =`date`。通過管道,您可以決定何時以及如何讀取輸出,或者將信號發送給過程。 – 2009-04-28 10:53:45