in reply to The hidden hashref

If I "use strict" then my program emits an error.
Which is pretty informative, so don't ignore it:
Can't use string ("") as a HASH ref while "strict refs" in use at foo. +pl line 8.

What this tells you is: you've used a symbolic reference, and it's name is the empty string. You can also retrieve it with the empty string as name.

But the things that's stored in the hash is still an empty string, and Data::Dumper reports it as such.

(The symbolic reference is resolved via the symbol table, not via the hash, which is why you don't see any references to 'bother" in the output).

I find unintended symbolic references rather confusing, which is why I always use strict;.