我想使用和操作我从Perl调用的程序的结果:
system (zgrep "failed at" $in_fname);
我想采用zgrep
操作它们的行,然后将操作行写入新文件。
我该怎么做?
答案 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函数。