Perl 支持三种运行外部程序的方式(据我所知):
system
:
system PROGRAM LIST
如:
system "abc";
反引号如:
`abc`;
通过管道运行它,如下所示:
open ABC, "abc|";
它们之间有什么区别?这是我所知道的:
- 您可以使用反引号和管道轻松获取命令的输出。
- 就是这样(在未来的编辑中更多?)
system()
: 运行命令并返回命令的退出状态反引号也将执行程序的 STDOUT 重定向到一个变量,系统将它发送到你的主程序的 STDOUT。
perlipc文档解释了您可以从 Perl 与其他进程交互的各种方式,而perlfunc 的开放文档解释了管道文件句柄。
还有一些模块通过跨平台边缘案例处理这些细节。
系统还返回应用程序的退出值(Windows 中的 ERRORLEVEL)。管道使用起来有点复杂,因为从它们读取并关闭它们会添加额外的代码。最后,它们有不同的实现,旨在做不同的事情。使用管道,您可以与已执行的应用程序进行通信,而其他命令则不允许这样做(很容易)。
获取程序的退出状态不限于system()
. 当您调用时close(PIPE)
,它会返回退出状态,您可以从 中获取所有 3 个方法的最新退出状态$?
。
另请注意
readpipe('...')
是相同的
`...`