IO::Uncompress::Gunzip gives you a filehandle interface to a gzip file
my $fh = new IO::Uncompress::Gunzip "input file",
or die "Cannot open file ..." ;
my $line = <$fh> ;
It also has the ability to assume the input file is uncompressed if the input data isn't a gzipped at all. To enable that mode just give it the
Transparent option like this
my $fh = new IO::Uncompress::Gunzip "input file",
Transparent => 1
or die "Cannot open file ..." ;
my $line = <$fh> ;
That will give you a filehandle that can read from either a gzip compressed file or uncompressed input file.
One limitation of IO::Uncompress::Gunzip is that it doesn't allow you to seek backwards in a file. If you have a requirement to be able to rewind the input file you will have to reopen the file again. Perhaps something like this (untested)
sub rewind
{
$_[0]->close();
$_[0] = new new IO::Uncompress::Gunzip $_[1],
Transparent => 1
or die "Cannot open file ..." ;
}
rewind($fh, "somefile");