#!/usr/bin/perl use strict; use warnings; while () { process_record ($1) if /^\s*START\s*(\w+)/; } sub process_record { my $start_value = shift; my @record; my $line; while (defined ($line=) and $line !~ /^\s*END/) { push @record, $line; } my ($end_value) = $line =~ /^\s*END\s+(\w+)/; @record = map{"$start_value $end_value $_"}@record; print @record; print "\n"; } =prints abc xyz MAY abc xyz JUNE abc xyz JULY oue 2345 MAY oue 2345 JUNE oue 2345 JULY =cut __DATA__ START abc MAY JUNE JULY END xyz blah ....more blah... START oue MAY JUNE JULY END 2345 #### # @record = map{"$start_value $end_value $_"}@record; # print @record; print "$start_value $end_value $_" for @record;