Я думаю, вы непонимание несколько концепций PERL здесь. Например, вы - split
ing массив - это не имеет большого смысла, потому что split
превращает строку в массив на основе разделителя.
Аналогичным образом grep
- это довольно необычное использование grep
, потому что у вас есть встроенный поиск и замена шаблона - обычно grep
предназначен для фильтрации на основе некоторого булевского выражения. (Я подозреваю, что это работает так, но я не совсем уверен, вернет ли ваш шаблон замены true/false, что сделает нечетные вещи в контексте grep
).
Так, как вместо того, чтобы:
my @output = `$our_command`;
chomp @output; #removes linefeeds from each element.
for (@output) { s/[\t\r]//g; }; #removes linefeeds and carriage returns
Это поместит в @output
один элемент в каждой строке (включая перевод строки), а затем удалите \t
или \r
там. Если вы не хотите перевода строки, как говорит Бородин, - chomp @output;
справится с этим.
Как указано в комментариях - это может не точно воспроизвести то, что делает strip
, а операция strip
может быть неактуальной в perl.
Тестирование Grep:
my @test = ("test aaa bbb", "mooo", " aaa Moo MMOoo", "no thing in it");
print join ("\n", grep { s/aaa//g } @test);
Это делает сделать поиск и замену на $_
(каждая строка grep
), но заменить выражение не возвращать «истина/ложь» - фактически это означает, вам отбрасывать элементы, которые вообще не содержат шаблонов.
Возможный дубликат [Как вы захватываете stderr, stdout и код выхода одновременно, в Perl?] (Http://stackoverflow.com/questions/109124/how-do-you-capture-stderr- stdout-and-the-exit-code-all-at-once-in-perl) –
Можете ли вы привести пример вывода, который вы обрабатываете? – Sobrique
@AlessandroDaRugna: код возврата и содержимое 'stderr' игнорируются в этом коде Python – Borodin