tie @l, "Tie::File", $file or die $!; for my $i (0 .. $#l) { if ($l[$i] =~ /Error Occurred/) { while($i > 0) { $i--; if ($l[$i] =~ /(A|B):\d+/) { print $l[$i]; exit; # or last } elsif ($l[$i] =~ /^====/) { exit; # or last } } } }