使用从Perl调用的程序的结果

时间:2011-03-08 10:11:03

标签: perl

我想使用和操作我从Perl调用的程序的结果:

system (zgrep "failed at" $in_fname);

我想采用zgrep操作它们的行,然后将操作行写入新文件。 我该怎么做?

3 个答案:

答案 0 :(得分:9)

system不返回结果,但外部程序退出状态

您必须使用`运算符(反引号)捕获结果:

my $var = `zgrep "failed at" $in_fname`;

答案 1 :(得分:5)

您也可以使用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: $! $?";

这可能是一种更好的方法,因为您可以获得数据,而不是一次性获取数据。至少如果你设置预定义变量$ | (自动冲洗)。有关预定义变量,请参阅http://www.ira.cnr.it/manuals/perl/manual/pod/perlvar.html

答案 2 :(得分:1)

OP:“我想使用和操纵系统调用的结果”

不,你没有。

您想要运行程序并捕获结果。

system call完全不同。

正如 tchrist 所指出的那样,syscall是用于访问系统调用的perl函数。