Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Reading output from command into Perl array

Tags:

command

perl

I want to get the output of a command into an array — like this:

my @output = `$cmd`;

but it seems that the output from the command does not go into the @output array.

Any idea where it does go?

like image 660
Avi Moraly Avatar asked Jun 05 '12 11:06

Avi Moraly


3 Answers

This simple script works for me:

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

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

foreach my $line (@output)
{
    print "<<$line>>\n";
}

It produced the output (except for the triple dots):

$ perl xx.pl
<<args>>
<<args.c>>
<<args.dSYM>>
<<atob.c>>
<<bp.pl>>
...
<<schwartz.pl>>
<<timer.c>>
<<timer.h>>
<<utf8reader.c>>
<<xx.pl>>
$

The output of command is split on line boundaries (by default, in list context). The chomp deletes the newlines in the array elements.

like image 125
Jonathan Leffler Avatar answered Nov 20 '22 13:11

Jonathan Leffler


The (standard) output does go to that array:

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",
# ]
like image 35
Quentin Avatar answered Nov 20 '22 14:11

Quentin


Enable automatic error checks:

require IPC::System::Simple;
use autodie qw(:all);
⋮
my @output = `$cmd`;
like image 35
daxim Avatar answered Nov 20 '22 13:11

daxim