используя результат программы, вызванной из Perl - PullRequest
2 голосов
/ 08 марта 2011

Я хочу использовать и манипулировать результатом программы, которую я вызываю из Perl:

system (zgrep "failed at" $in_fname);

Я хочу взять строки, сделанные zgrep, манипулировать ими и затем написатьманипулируемые строки в новый файл.как мне это сделать?

Ответы [ 3 ]

9 голосов
/ 08 марта 2011

system не возвращает результаты, но внешняя программа статус выхода .

Вы должны захватить результат с помощью оператора `(обратная кавычка):

my $var = `zgrep "failed at" $in_fname`;
5 голосов
/ 08 марта 2011

Вы также можете использовать открытое заявление Perl.Просто добавьте трубу (|) в конце.См .: http://perldoc.perl.org/perlipc.html#Using-open()-for-IPC

use warnings;
use strict;

open my $zgreph, 'zgrep "failed at" $in_fname |'
        or die "can't fork: $!";

while (my $data = <$zgreph>) {
        print $data;
}
close $zgreph
        or die "error closing: $! $?";

Это может быть лучшим подходом, поскольку вы получаете данные по мере поступления, а не все сразу.По крайней мере, если вы установите предопределенную переменную $ |(AutoFlush).См. http://www.ira.cnr.it/manuals/perl/manual/pod/perlvar.html для предопределенных переменных.

1 голос
/ 08 марта 2011

OP:"Я хочу использовать и манипулировать результатом системного вызова"

Нет, нет.

Вы хотите запустить программу и записать результаты.

Системный вызов - это нечто совершенно другое.

Как умело указал tchrist , syscall - это функция perl, используемая для доступа к системным вызовам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...