my @entries; my @keys; while ($_ = ) { if ($. == 0) { # first line @keys = split /;/; next; } my %data; $data{@keys} = split/;/; push @entries, \%data; }