use warnings; use strict; my $horiz_data = <<"HORIZ" ; |||01/01/2007|01/02/2007|01/03/2007|06/29/2007| |JOHN DOE|Event1|PARTY|CLASS|WORK|VACATION| |JOHN D0E|Event2|CLASS|CLASS|WORK|PARTY| |JANE DOE|Event1|PARTY|CLASS|WORK|VACATION| |JANE DOE|Event2|CLASS|CLASS|WORK|PARTY| HORIZ my @horiz = split "\n", $horiz_data; my @dates = split '\|', shift @horiz; shift @dates; shift @dates; shift @dates; for my $line (@horiz) { my @flds = split '\|', $line; shift @flds; my $name = shift @flds; my $event = shift @flds; my @dates_copy = @dates; for my $date (@dates_copy) { print "|$name|$date|$event|",shift(@flds),"|\n"; } } # for $line