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