使用Perl将参数作为单独的参数提供给系统调用是否有用?

Laz*_*zer 7 perl

在Unix上,所有这三个都会产生相同的结果

system("top -H -p $pid -n 1");             #ver1
system("top", "H", "p $pid", "n 1");       #ver2
system("top", "-H", "-p $pid", "-n 1");    #ver3
Run Code Online (Sandbox Code Playgroud)
  • 是什么区别VER2VER3

  • 有什么理由我应该使用ver2ver3,而不是ver1

  • 它们甚至不支持管道结果,例如,是否有以下调用的ver2ver3等价物?

    system("top -H -p $pid -n 1 | grep myprocess | wc -l");
    
    Run Code Online (Sandbox Code Playgroud)

Hyn*_*dil 5

即使它看起来一样也不一样:

$ perl -e 'system("./test.pl -H -p $$ -n 1");system("./test.pl", "H", "p $$", "n 1");system("./test.pl", "-H", "-p $$", "-n 1");'
-H,-p,10497,-n,1
H,p 10497,n 1
-H,-p 10497,-n 1
$ cat ./test.pl 
#!/usr/bin/perl
$\="\n";
$,=",";
print @ARGV;
Run Code Online (Sandbox Code Playgroud)

它的top实现是相同的.其他应用可能无法正常工作.