my @tmp = qw( a b c d ); my @keys = reverse @tmp; my $first_key = shift @keys; my $hash = { $first_key => [ 0 ] }; foreach my $key ( @keys ) { $hash = { $key => $hash }; } use Data::Dumper; print Dumper( $hash ); #### my @tmp = qw( a b c d ); my $hash = [0]; # not really a hash foreach my $key ( reverse @tmp ) { $hash = { $key => $hash }; } use Data::Dumper; print Dumper( $hash );