while () { # look for start of record next unless /START_RECORD_MARKER/; # output the next 17 lines into a file my @seventeen; push @seventeen, scalar for 1 .. 17; # reformat the contents of @seventeen in some way open OUTPUT, '>', 'first_part_of_record.txt' or die $!; print OUTPUT @seventeen; close OUTPUT; # output the rest of the record into another file my @rest; while () { last if /END_RECORD_MARKER/; push @rest, $_; } # reformat @rest in some way open OUTPUT, '>', 'next_part_of_record.txt' or die $!; print OUTPUT @rest; close OUTPUT; }