in reply to How to transform a matrix into a hash??
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.
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^2: How to transform a matrix into a hash??
by ikegami (Patriarch) on Feb 05, 2008 at 18:00 UTC |