use warnings; use strict; my $flag = 0; my @lines; while () { if (/KEY/) { @lines = (); $flag = 1; } if ($flag) { push @lines, $_; if (/PATTERN/) { print @lines; $flag = 0; } } } __DATA__ KEY blah blahblah KEY blah ah other random stuff KEY blah ha other random stuff PATTERN asdf KEY fdas PATTERN #### KEY blah ha other random stuff PATTERN KEY fdas PATTERN