use File::ReadBackwards; my $file_name = "filename"; my $fh = File::ReadBackwards->new($file_name) or die("Unable to read log file $file_name: $!"); my @lines = reverse grep /foo/, grep defined, map { scalar $fh->readline() } 1..10;