Autovivification happens in an lvalue context, but you're using it only as an rvalue in the else branch of your accessors.
Update: And just to be (more :) pedantic, this isn't strictly speaking autovivification that you're expecting (that's automatically creating a reference to the proper data type when undef is used in an lvalue context). What you're seeing is access to a non-existent hash slot not creating an entry in that slot.
In reply to Re: Why is this not autovivifying?
by Fletch
in thread Why is this not autovivifying?
by blahblah
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |