我想使用perl的command
运行一些命令(例如system()
)。假设command
从shell运行,如下所示:
command --arg1=arg1 --arg2=arg2 -arg3 -arg4
如何使用system()
使用这些参数运行command
?
答案 0 :(得分:9)
最佳做法:避免使用shell,使用自动错误处理 - IPC::System::Simple
。
require IPC::System::Simple;
use autodie qw(:all);
system qw(command --arg1=arg1 --arg2=arg2 -arg3 -arg4);
use IPC::System::Simple qw(runx);
runx [0], qw(command --arg1=arg1 --arg2=arg2 -arg3 -arg4);
# ↑ list of allowed EXIT_VALs, see documentation
编辑:跟随咆哮。
system
。 eugene y的回答只是其中的一部分。
每当我们处于这种情况时,我们就会在模块中捆绑重复的代码。我使用Try::Tiny
绘制了与正确的简单异常处理相似的内容,但{em> IPC::System::Simple
完成了system
没有看到社区的这种快速采用。似乎需要更频繁地重复。
所以,使用autodie
!使用IPC::System::Simple
!保存自己的单调乏味,请放心使用经过测试的代码。
答案 1 :(得分:5)
my @args = qw(command --arg1=arg1 --arg2=arg2 -arg3 -arg4);
system(@args) == 0 or die "system @args failed: $?";
更多信息位于perldoc。
答案 2 :(得分:1)
与Perl中的所有内容一样,有多种方法可以实现:)
最好的方法,将参数作为列表传递:
system("command", "--arg1=arg1","--arg2=arg2","-arg3","-arg4");
虽然有时程序似乎不适合该版本(特别是如果它们希望从shell调用)。如果你将它作为单个字符串执行,Perl将从shell调用该命令。
system("command --arg1=arg1 --arg2=arg2 -arg3 -arg4");
但这种形式比较慢。
答案 3 :(得分:1)
my @args = ( "command", "--arg1=arg1", "--arg2=arg2", "-arg3", "-arg4" );
system(@args);