小编典典

Perl 的反引号、system 和 exec 有什么区别?

all

有人可以帮帮我吗?在 Perl 中,有什么区别:

exec "command";

system("command");

print `command`;

还有其他方法可以运行 shell 命令吗?


阅读 134

收藏
2022-05-20

共1个答案

小编典典

执行

执行命令并且 永不返回 。这就像return函数中的语句。

如果找不到该命令,则exec返回 false。它永远不会返回
true,因为如果找到该命令,它就永远不会返回。STDOUT命令的返回或STDERR退出状态也没有意义。您可以在 中找到有关它的文档
perlfunc ,因为它是一个函数。

系统

执行命令,并且在命令完成后继续执行您的 Perl 脚本。

返回值是命令的退出状态。您可以在 中找到有关它的文档
perlfunc

反引号

likesystem执行命令,并且在命令完成后继续执行您的 perl 脚本。

system 与返回值相反的是STDOUT命令。 qx//相当于反引号。您可以在 中找到有关它的文档
perlop

,因为与它不同的是systemexec它是一个运算符。


其他方法

上面缺少的是一种异步执行命令的方法。这意味着您的 perl 脚本和您的命令同时运行。这可以通过
open
.
它允许您读取STDOUT/STDERR写入STDIN您的命令。虽然它依赖于平台。

还有几个模块可以简化此任务。有IPC::Open2IPC::Open3IPC::Run就像
Win32::Process::Create你在窗户上一样。

2022-05-20