I would not recommend using eval. What's wrong with the recursive solution you have? If you really want to eval:
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 } } };
Update: In addition to saying that eval is probably not the best way to do this, I should have added that my particular implementation is not as careful as it should be. If this were really to be used, it would be a good idea to (1) better quote the indices into the hash, and (2) check the value of $@ (aka $EVAL_ERROR if you use English, see perlvar) in case of error.
In reply to Re: How to transform a matrix into a hash??
by kyle
in thread How to transform a matrix into a hash??
by yocoim
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |