use Data::Dumper; my @start = ( [qw( a b c )], [qw( a b d )], [qw( b b b )], ); my %finish; my $e = join '', map { join '', '$finish', ( map {qq{{'$_'}}} @$_ ), " = 1;\n" } @start; print $e, "\n"; eval $e; print Dumper \%finish; __END__ $finish{'a'}{'b'}{'c'} = 1; $finish{'a'}{'b'}{'d'} = 1; $finish{'b'}{'b'}{'b'} = 1; $VAR1 = { 'a' => { 'b' => { 'c' => 1, 'd' => 1 } }, 'b' => { 'b' => { 'b' => 1 } } };