有人可以帮帮我吗?在Perl中,两者之间有什么区别?

exec "command";


system("command");


print `command`;

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

最佳答案

执行

执行命令,永不返回。
就像函数中的return语句一样。

如果找不到该命令,exec返回false。
它永远不会返回true,因为如果找到该命令,它将根本不会返回。
返回STDOUTSTDERR或命令的退出状态也没有意义。
您可以在 perlfunc 中找到有关它的文档,
因为它是一个功能。

系统

执行命令,命令完成后继续执行Perl脚本。

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

反引号

system执行命令,命令完成后继续执行perl脚本。

system 相反,返回值是命令的STDOUT
qx//等同于反引号。
您可以在 perlop 中找到有关它的文档,因为与systemexec不同,它是运算符。

其他方式

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

还有几个模块可以简化此任务。
IPC::Open2IPC::Open3IPC::Run,以及Win32::Process::Create(如果您在Windows上)。

关于perl - Perl的反引号,系统和exec有什么区别?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/799968/

10-12 03:28