sub BEGIN { ($_ = shift(@ARGV)) foreach (($B, $A, $p)); } LINE: while (defined(($_ = ))) { (/pat/ and ((@l = ()), do { foreach (1 .. $A) }, next)); push(@l, $_); (($B < @l) and print(shift(@l))); } { print(@l); }