in reply to Setting the value of a complicated hash ref

Are you sure this isn't the problem:
if ($config{debug}) { print "pos[depth]: " . ${$pos[$depth]} . "\n" }
This tries to treat $pos[$depth] as a scalar reference and dereference it. But that array entry is just a plain scalar, so you don't need to dereference it at all.

I'm guessing though, since I didn't take the time to run your code.