use strict; use warnings; my $flag1 = 0; my $flag2 = 0; my @lines; while () { $flag2 = 1 if $flag1 and /A1/; $flag1 = 1 if /SUBSCRIBER/; push @lines, $_ if $flag1; if (/NATIONAL/) { print @lines if $flag2; $flag1 = 0; $flag2 = 0; @lines = (); } } __DATA__ foo bar SUBSCRIBER goo hoo nada NATIONAL SUBSCRIBER goo A1 NATIONAL junk junk junk #### SUBSCRIBER goo A1 NATIONAL #### use strict; use warnings; my $flag = 0; my @lines; while () { if (/SUBSCRIBER/ .. /NATIONAL/) { push @lines, $_; $flag = 1 if /A1/; if (/NATIONAL/) { print @lines if $flag; $flag = 0; @lines = (); } } }