我喜欢使用IO::File打开和读取文件,而不是内置方式。

内置方式

 open my $fh, "<", $flle or die;


IO :: File

 use IO::File;

 my $fh = IO::File->new( $file, "r" );


但是,如果我将命令输出视为文件怎么办?

内置的open功能允许我执行以下操作:

open my $cmd_fh, "-|", "zcat $file.gz" or die;

while ( my $line < $cmd_fh > ) {
    chomp $line;
}


IO::FileIO::Handle等于什么?

顺便说一句,我知道可以做到这一点:

open my $cmd_fh,  "-|", "zcat $file.gz" or die;
my $cmd_obj = IO::File-> new_from_fd( fileno( $cmd_fh ), 'r' );


但是,如果已经有文件句柄,为什么还要麻烦IO::File

最佳答案

您可以像在open中一样打开它们,因为这正是IO::File的作用-它初始化IO::Handle对象并将其链接到使用Perl的本机open打开的文件。

use IO::File;

if (my $fh = new IO::File('dmesg|')) {
   print <$fh>;
   $fh->close;
}


IO::File实际上只是一个漂亮的包装器。如果它还不够复杂,您可以从喜欢的任何FD中启动IO::Handle。我想您还需要IO :: * OO功能的其余部分,那么谁在乎初始化程序的外观呢?

关于perl - 不读取实际文件时使用`IO::Handle`或`IO::File`的Perl,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21465584/

10-12 00:11
查看更多