I've been happy using Class::MethodMaker, and using the easily defined accessors / setters for all access into the object, both from outside, from inside (the class itself), and from any subclasses. Then nobody steps on anyone else. And given all the convenience functions C:MM offers, I'm not tempted to cheat and push stuff into hash directly.
in reply to Why is a hash the default "object" in oo perl?
You won't find the eight characters
in my code, as I never go into $self as a hash. In fact, CMM could migrate itself to inside-out objects or blessed pumpkin bread or whatever, and I wouldn't even notice.
The only downside I can see to this is speed, but my apps are all disk-IO-bound anyway, so the extra wrapper calls don't matter a whit.
Your mileage may vary--
water, water, everywhere