use Data::Dumper; my $my_hash_ref = { a => { b => { c => 2 } } }; my @k = qw( a b c ); my $r = $my_hash_ref; $r = $r->{$_} foreach @k; $r = 3; print Dumper($my_hash_ref); # { 'a' => { 'b' => { 'c' => 2 } } }; #### use Data::Dumper; my $my_hash_ref = { a => { b => { c => 2 } } }; my @k = qw( a b c ); my $p = \$my_hash_ref; $p = \($$p->{$_}) foreach @k; $$p = 3; print Dumper($my_hash_ref); # { 'a' => { 'b' => { 'c' => 3 } } }; #### my @k = qw( a b c ); $my_hash_ref->{$k[0]}->{$k[1]}->{$k[2]} = 2; my $r = $my_hash_ref; $r = $r->{$_} foreach @k; $r = 3; print($my_hash_ref->{$k[0]}->{$k[1]}->{$k[2]}, "\n"); # 2 #### my @k = qw( a b c ); $my_hash_ref->{$k[0]}->{$k[1]}->{$k[2]} = 2; my $p = \$my_hash_ref; $p = \($$p->{$_}) foreach @k; $$p = 3; print($my_hash_ref->{$k[0]}->{$k[1]}->{$k[2]}, "\n"); # 3