Perl解析可能会或可能不会被gzip压缩的文本文件

时间:2015-05-05 23:33:43

标签: perl gzip

我正在使用Perl来解析一个文本文件,该文件可能是也可能不是gzip:

my $FILE;
if ( $file =~ /\.gz$/ ) {
    open( $FILE, "gunzip -c $file |" ) || die $!;
} else {
    open( $FILE, '<', $file ) || die $!;
}

有没有更简单的方法来解决这个问题?

2 个答案:

答案 0 :(得分:6)

核心模块IO::Uncompress::Gunzip返回文件句柄,如果文件未压缩/未知默认将文件句柄传递给原始文件,这对我有用;

use IO::Uncompress::Gunzip qw($GunzipError);

# Random file, plain text, and gzipped
my $file=('file.in', 'file.in.gz')[rand 2];
print "Picked $file\n";

# Get file Handle
my $FILE = IO::Uncompress::Gunzip->new( $file )
            or die "Problem found with $file: $GunzipError";

while(<$FILE>) { print; }

答案 1 :(得分:3)

open $FILE, "zcat -f $file|" or die $!;

man zcat

  

-f --force

     

如果输入数据不是gzip识别的格式,并且还提供了选项--stdout,则复制输入数据而不更改标准输出:让zcat表现为cat。