为什么我不能在Perl中使用system()获取命令的输出?

biz*_*nez 1 perl ipc

从Perl在命令行上执行命令时,有没有办法将该结果存储为Perl中的变量?

my $command    = "cat $input_file | uniq -d | wc -l";
my $result     = system($command);
Run Code Online (Sandbox Code Playgroud)

$result 总是变成0.

exh*_*uma 10

使用"反引号":

my $command    = "cat $input_file | uniq -d | wc -l";
my $result     = `$command`;
Run Code Online (Sandbox Code Playgroud)

如果对退出代码感兴趣,您可以使用以下代码捕获它:

my $retcode = $?;
Run Code Online (Sandbox Code Playgroud)

在进行外部通话后.


bri*_*foy 6

来自perlfaq8:


为什么我不能用system()获取命令的输出?

你混淆了目的system()和反引号(````).system()运行命令并返回退出状态信息(作为16位值:低7位是进程死亡的信号,如果有的话,高8位是实际退出值).反引号(``)运行命令并返回它发送给STDOUT的内容.

$exit_status   = system("mail-users");
$output_string = `ls`;
Run Code Online (Sandbox Code Playgroud)