Perl支持三种(我所知道的)运行外部程序的方式:
system
:
system PROGRAM LIST
如下:
system "abc";
反引号的使用方法如下:
`abc`;
将其通过管道运行,例如:
open ABC, "abc|";
它们之间有什么区别?这是我所知道的:
- 您可以使用反引号和管道轻松获取命令的输出。
- 就这样(将来的编辑中可能会有更多?)
system()
:运行命令并返回命令的退出状态另外,反引号将执行程序的STDOUT重定向到变量中,而system则将其发送到主程序的STDOUT。
Perlipc文档介绍了Perl与其他进程交互的各种方式,而perlfunc的open文档则介绍了管道文件句柄。
还有一些模块处理这些细节以处理跨平台边缘情况。
系统还返回应用程序的退出值(在Windows中为ERRORLEVEL)。 使用管道有些复杂,因为读取和关闭它们需要额外的代码。 最后,它们有不同的实现,旨在完成不同的任务。使用管道,您可以与执行的应用程序进行双向通信,而其他命令则不允许这样做(容易)。
system()
。当您调用close(PIPE)
时,它会返回退出状态,并且您可以从$?
获取所有3种方法的最新退出状态。readpipe('...')
等同于
`...`
...
和 qx/.../(以及 qx(...)、qx#...# 和任何其他分隔符)也是等效的。 - ephemient
date
。使用管道,您可以决定何时以及如何读取输出,或向进程发送信号。 - Mathieu Longtin