使用perl的`system`

Dav*_*d B 3 perl system execution

我想command用perl 运行一些命令(例如)system().假设command从shell运行如下:

command --arg1=arg1 --arg2=arg2 -arg3 -arg4
Run Code Online (Sandbox Code Playgroud)

如何使用这些参数system()运行command

dax*_*xim 9

最佳实践:避免使用shell,使用自动错误处理 - IPC::System::Simple.

require IPC::System::Simple;
use autodie qw(:all);
system qw(command --arg1=arg1 --arg2=arg2 -arg3 -arg4);
Run Code Online (Sandbox Code Playgroud)
use IPC::System::Simple qw(runx);
runx [0], qw(command --arg1=arg1 --arg2=arg2 -arg3 -arg4);
#     ? list of allowed EXIT_VALs, see documentation
Run Code Online (Sandbox Code Playgroud)

编辑:接下来是咆哮.

eugene y的答案包括系统文档的链接.在那里,我们可以看到每次都需要包含的一段代码,以便system正确完成.eugene y的答案显示了其中的一部分.

每当我们处于这种情况时,我们就会在模块中捆绑重复的代码.我将正确的简洁异常处理与之相提并论Try::Tiny,但IPC::System::Simple正如system所做的那样,没有看到社区的这种快速采用.似乎需要更频繁地重复.

所以,使用autodie!用IPC::System::Simple!保存自己的单调乏味,请放心使用经过测试的代码.

  • 好吧,你可能根本不关心"零"和"非零"之外的任何事情. (3认同)
  • 要"正确"地进行系统,你必须解码`$?`?我不这么认为. (2认同)

Eug*_*ash 5

my @args = qw(command --arg1=arg1 --arg2=arg2 -arg3 -arg4);
system(@args) == 0 or die "system @args failed: $?";
Run Code Online (Sandbox Code Playgroud)

更多信息是perldoc.