in reply to Persistence of a filehandle for a large file with varying formats

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");

Replies are listed 'Best First'.
Re^2: Persistence of a filehandle for a large file with varying formats
by seaver (Pilgrim) on Jan 25, 2013 at 17:31 UTC

    Well there you have it, a straight forward answer, I'll test this now. Thank you!