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.
Interesting, especially since I do use
Class::DBI, but mostly in a relatively naive way, since I've been exposed to it by more experienced (in
Class::DBI itself, that is - and in DBses in general) coworkers.