I've dynamic nested hash-refs like this:
my $hash = { 'a' => { 'b' => { 'c' => 'value' } } };
I want to set the value of c to 'something' by allowing the user to input "a.b.c something".
Now getting the value could be done like this:
my $keys = 'a.b.c';
my $v='something';
my $h = $hash;
foreach my $k(split /\./, $keys) {
$h = $h->{$k};
}
print $h; # "value"
But how would I set the value of key c
to $v
so that
print Dumper $hash;
would reflect the change? $h
is not a ref at the end of the foreach loop, so changing that won't reflect the change in $hash
. Any hints how to solve the knots in my head?
A more powerful (and thus slightly harder to use) version of this function is provided by Data::Diver.
(daxim's usage is slightly off.)
Something like this: