Yes, autovivification is capricious. It would be a great improvement if it only happened in lvalue contexts (ordinary value contexts could simply short-circuit and return null). If I may add an adjective to your canonical list, I'd like to present The Simple: if Perl has to go through
(dereference) a reference to get to something, autovivification happens (obviously, it also happens if the reference is itself used in lvalue context).
The subject does, from time to time, come up here, as in Looping through a hash reference is creating a key...?.
Caution: Contents may have been coded under pressure.