【发布时间】:2019-02-01 22:17:15
【问题描述】:
system、exec、open '|-'、open2 等都允许我指定要作为参数列表运行的命令,这些参数将直接传递给 execvp,而不是通过 shell 运行.
即使perl 足够聪明,可以直接运行它(如果它看起来像一个“简单”命令),这也为我省去了正确地对参数进行外壳转义以及它所带来的所有令人讨厌的陷阱的麻烦。
例子:
open my $out, '|-', $prog, @args;
system $prog, @args;
exec $prog, @args;
而不是
open my $out, "|$prog @args";
system "$prog @args";
exec "$prog @args";
qx// 运算符是否有这样的等价物?或者你必须总是手工做吗?例如。
sub slurpcmd {
open my $h, '-|', @_ or die "open $_[0]|: $!";
local $/ unless wantarray;
<$h>
}
【问题讨论】: