use PerlIO::gzip; use Carp; ... my $iolayer = ''; if($filename =~ /\.gz$/i) { $iolayer = ':gzip'; } open($ifh, '<' . $iolayer, $filename) or croak("$!"); ... # Process data while((my $line = <$ifh>)) { chomp $line; if($line =~ /bla/) { doBla($line); } else { doBlub($line); } } ... close $ifh;