my (@array, $keep); while (<$handle>) { if (!@array) {$keep = /FIRST_PATTERN/;} next unless $keep; # Next if we haven't seen the first pattern. push @array, $_; next unless $keep = !/SECOND_PATTERN/; # Next unless the second pattern is seen. process_array \@array; # Process and print print @array; @array = (); }