#!/usr/bin/perl use strict; use warnings; use feature qw/ say /; use Data::Dumper; my @values = ('inbox', 'yes', 'NZ'); my %data; $data{ $_ } = shift @values for qw/ mailbox subscribe country /; say Dumper \%data; __END__ #### [nick:~/monks]$ perl 1140269.pl $VAR1 = { 'subscribe' => 'yes', 'country' => 'NZ', 'mailbox' => 'inbox' }; #### #!/usr/bin/perl use strict; use warnings; use feature qw/ say /; use Data::Dumper; $Data::Dumper::Sortkeys = 1; my @records = ( [ 'inbox', 'yes', 'NZ' ], [ 'inbox', 'no', 'UK' ], [ 'outbox', 'yes', 'UK' ] ); my $href; my $index = 0; foreach my $record ( @records ) { ++$index; $href->{ $index }->{ $_ } = shift @{ $record } for qw/ mailbox subscribe country /; } say Dumper $href; __END__ #### [nick:~/monks]$ perl 1140269.pl $VAR1 = { '1' => { 'country' => 'NZ', 'mailbox' => 'inbox', 'subscribe' => 'yes' }, '2' => { 'country' => 'UK', 'mailbox' => 'inbox', 'subscribe' => 'no' }, '3' => { 'country' => 'UK', 'mailbox' => 'outbox', 'subscribe' => 'yes' } };