use Data::Dumper; my @array1 = ('foo', 'bar', 'baz'); my @array2 = ('foo2', 'bar2', 'baz3'); my $hashref = {}; foreach my $a(\@array1, \@array2){ my $tmpref = $hashref; foreach my $k(@$a){ $tmpref->{$k} = {}; $tmpref = $tmpref->{$k}; } } print Dumper $hashref; __OUTPUT__ $VAR1 = { 'foo2' => { 'bar2' => { 'baz3' => {} } }, 'foo' => { 'bar' => { 'baz' => {} } } };