use Tie::Gzip; for my $log (@files) { tie *LOG, 'Tie::Gzip'; open (\*LOG, '<', "$log") or die("Cannot open $log: $!"); while (my $line = ) { # Iterate over the files here and do blah } close (LOG); untie *LOG; }