my $re_record = qr[ #LastName, FirstName Home field ([^,]+) ,([^ ]+) \sHome <([^>]+) >\s+field\s<([^>]+)> \s*\n #Address1 Work field\s (.*) Work <([^>]+) >\s+field\s<([^>]+)> \s*\n #Address2 field (.*) field\s<([^>]+)> \s*\n #City, State, zip field field ([^,]+),([^,]+),(.*) field\s<([^>]+)>\sfield\s<([^>]+)> \s*\n \s* \n #field field field field\s<([^>]+)> \s+field\s<([^>]+)> \s+ field\s<([^>]+)> \s*\n #field field field field\s<([^>]+)> \s+field\s<([^>]+)> \s+ field\s<([^>]+)> \s*\n #field field field field\s<([^>]+)> \s+field\s<([^>]+)> \s+ field\s<([^>]+)> \s*\n ]x; my $record = slurp_file( $filename ); my %record; @record{ qw[ .... ] } = ( $record =~ $re_record ); $personnel{ .... } = \%record;