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>
}