use strict; use warnings; $/ = ''; # paragraph mode while () { next if /^\s/; # the header chomp; my @just_the_values = /^[^.]*\.* {1,2}(.*)/mg; my %keys_and_values = /^([^.]*)\.* {1,2}(.*)/mg; print "'$_'\n" for @just_the_values; print "$_ = '$keys_and_values{$_}'\n" for sort keys %keys_and_values; print "----------------\n"; } __DATA__ NEW VEHICLE INVENTORY prepared by ANYUSER 04:15:00pm 21 Jul 2009 - PAGE # 2 STOCK NO........... G0034203 YR................. 10 CARLINE............ ACADIA SERIAL#............ 1GKLRKEDXAJ102450 COLOR DESCRIPTIONS. / LST PRICE.......... 36010.00 SALES CST.......... 36010.00 DAY................ 20 SC................. 1 STOCK NO........... G0034204 YR................. 10 CARLINE............ ACADIA SERIAL#............ 1GKLRKED1AJ101543 COLOR DESCRIPTIONS. / LST PRICE.......... 33615.00 SALES CST.......... 33615.00 DAY................ 20 SC................. 1