Nice work. However, the "other modules might clobber you if they're not careful" part is a worry to me. When we implemented
Pixie::Info as a way of storing out of band data for
Pixie (we need it so that Pixie can manage objects in memory without having to alter anything 'visible' -- no invading of hashes for us...) we came to the conclusion that the very clobberability of '~' magic (and some of the special case semantics that are automatically associated with it mean that *not* clobbering '~' magic is hard work) meant we should use a different magic symbol, after all, there's over 200 available, we chose chr(155).
What we *should* have done, of course, is to hang a hash off the object and hang our out of band information in the 'Pixie' slot...