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