system,exec,open '|-',open2,等方面都让我来指定作为将直接传递到参数列表运行命令execvp通过一个外壳,而不是运行.
即使perl它足够聪明,如果它看起来像一个"简单"的命令,它可以直接运行它,这样可以省去正确的shell转义所带来的所有令人讨厌的陷阱的麻烦.
例:
open my $out, '|-', $prog, @args;
system $prog, @args;
exec $prog, @args;
Run Code Online (Sandbox Code Playgroud)
代替
open my $out, "|$prog @args";
system "$prog @args";
exec "$prog @args";
Run Code Online (Sandbox Code Playgroud)
qx//运营商是否有这样的等价物?或者你必须总是手工完成,例如.
sub slurpcmd {
open my $h, '-|', @_ or die "open $_[0]|: $!";
local $/ unless wantarray;
<$h>
}
Run Code Online (Sandbox Code Playgroud)