Also, I'm very curious as to know wether someone has ever met any situation in which it has been useful or sensible to have part of the data "inside" the object and part of it stored in a package lexical: possibly by still using the object's blessed reference as in index into a hash, or by some other technique...
Class::DBI does exactly this. If enabled, there is an 'object index' which makes sure that there is only one instance of a given table row existing as an object at a time. This doesn't provided caching, but a means to make sure that you don't do something stupid since they aren't really multiple objects, just refs to the same row.
-- fast, working, cheap - pick two