从命令读取输出到Perl数组

Avi*_*aly 11 perl command

我想将命令的输出输入数组 - 像这样:

my @output = `$cmd`;
Run Code Online (Sandbox Code Playgroud)

但似乎命令的输出不会进入@output数组.

知道它去哪里了吗?

Jon*_*ler 15

这个简单的脚本适合我:

#!/usr/bin/env perl
use strict;
use warnings;

my $cmd = "ls";    
my @output = `$cmd`;    
chomp @output;

foreach my $line (@output)
{
    print "<<$line>>\n";
}
Run Code Online (Sandbox Code Playgroud)

它产生了输出(三点之外):

$ perl xx.pl
<<args>>
<<args.c>>
<<args.dSYM>>
<<atob.c>>
<<bp.pl>>
...
<<schwartz.pl>>
<<timer.c>>
<<timer.h>>
<<utf8reader.c>>
<<xx.pl>>
$
Run Code Online (Sandbox Code Playgroud)

命令的输出在行边界上分割(默认情况下,在列表上下文中).该chomp删除数组元素内的换行.


Que*_*tin 6

(标准)输出确实转到该数组:

david@cyberman:listing # cat > demo.pl
#!/usr/bin/perl
use strict;
use warnings;
use v5.14;
use Data::Dump qw/ddx/;

my @output = `ls -lh`;
ddx \@output;
david@cyberman:listing # touch a b c d
david@cyberman:listing # perl demo.pl
# demo.pl:8: [
#   "total 8\n",
#   "-rw-r--r--  1 david  staff     0B  5 Jun 12:15 a\n",
#   "-rw-r--r--  1 david  staff     0B  5 Jun 12:15 b\n",
#   "-rw-r--r--  1 david  staff     0B  5 Jun 12:15 c\n",
#   "-rw-r--r--  1 david  staff     0B  5 Jun 12:15 d\n",
#   "-rw-r--r--  1 david  staff   115B  5 Jun 12:15 demo.pl\n",
# ]
Run Code Online (Sandbox Code Playgroud)


dax*_*xim 2

启用自动错误检查:

\n\n
require IPC::System::Simple;\nuse autodie qw(:all);\n\xe2\x8b\xae\nmy @output = `$cmd`;\n
Run Code Online (Sandbox Code Playgroud)\n