Perl中系统和反引号和管道之间的区别是什么?

时间:2009-04-28 10:00:09

标签: perl system pipe backticks

Perl支持运行外部程序的三种方式(我知道):

system

   system PROGRAM LIST

如:

system "abc";

反推,如:

`abc`;

通过管道运行它,如:

open ABC, "abc|";

它们之间有什么区别?这就是我所知道的:

  1. 您可以使用反引号和管道轻松获取命令的输出。
  2. 就是这样(未来的编辑会更多?)

4 个答案:

答案 0 :(得分:36)

  • system():运行命令并返回命令的退出状态
  • 反引号:运行命令并返回命令的输出
  • pipes:运行命令,允许您使用将它们作为句柄

此外,反引号将执行程序的STDOUT重定向到变量,系统将其发送到主程序的STDOUT。

答案 1 :(得分:3)

perlipc文档介绍了与Perl中其他进程交互的各种方法,perlfunc's open documentation解释了管道文件句柄。

  • 系统将其输出发送到标准输出(和错误)
  • 反引号捕获标准输出并返回它(但不是标准错误)
  • 管道打开允许您捕获输出并从文件句柄中读取它,或者打印到文件句柄并将其用作外部命令的输入。

还有一些模块可以通过跨平台边缘情况处理这些细节。

答案 2 :(得分:2)

系统还返回应用程序的退出值(Windows中的ERRORLEVEL)。 管道使用起来有点复杂,因为从它们读取并关闭它们会增加额外的代码。 最后,他们有不同的实现,这意味着做不同的事情。使用管道,您可以与执行的应用程序进行通信,而其他命令则不允许(轻松)。

答案 3 :(得分:1)

获取程序的退出状态不仅限于system()。当您致电close(PIPE)时,它会返回退出状态,您可以从$?获取所有3种方法的最新退出状态。

请注意

readpipe('...')

相同
`...`