my @records; my @fields = qw( Company Title Phone Address Contact ); # read in a record at a time { my %record; @record{@fields} = ('') x @fields; foreach my $element ($line) { my ($field, $value) = split(/:\s*/, $element); $record{$field} = $value; } push @records, \%record; }