Чтение вывода команды в массив Perl

Я хочу получить вывод команды в массив & # x2014; как это:

my @output = `$cmd`;

но похоже, что вывод команды не входит в@output массив.

Любая идея, куда это идет?

 Jonathan Leffler05 июн. 2012 г., 13:19
Как вы определяете, что выходные данные не попадают в массив?
 dgw05 июн. 2012 г., 13:14
Ты уверен, что твоя команда пишет в STDOUT? Если он пишет в STDERR, обратные галочки не поймут это без добавления2>&1 на ваш звонок.

Ответы на вопрос(3)

Включить автоматическую проверку ошибок:

require IPC::System::Simple;
use autodie qw(:all);
⋮
my @output = `$cmd`;

Этот простой скрипт работает для меня:

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

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

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

Он вывел результат (кроме тройных точек):

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

Вывод команды разделен на границы строк (по умолчанию в контексте списка).chomp удаляет символы новой строки в элементах массива.

 Avi Moraly05 июн. 2012 г., 13:58
вывод не ошибка, я не знаю, что это на самом деле
 Jonathan Leffler05 июн. 2012 г., 14:29
Тогда вам может понадобиться более четко определить вашу команду. Я показал назначение на$cmd; Вы не показали, что находится в команде, которую вы выполняете. Вы пробовали использоватьls илиpwd илиecho Hello World в качестве команды, чтобы увидеть, получаете ли вы что-нибудь полезное обратно Вы также не показали, как вы обрабатываете массив.

(Стандартный) вывод идет в этот массив:

[email protected]:listing # cat > demo..14;
use Data::Dump qw/ddx/;

my @output = `ls -lh`;
ddx \@output;
[email protected]:listing # touch a b c d
[email protected]: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",
# ]

Ваш ответ на вопрос