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?
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?
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.
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",
# ]
Enable automatic error checks:
require IPC::System::Simple;
use autodie qw(:all);
⋮
my @output = `$cmd`;