The object isn't destroyed at global destruction (though I certainly ran head-first into that issue during the first implementations). When the object is created, the Class::AutoDB::SmartProxy class is unshifted onto its ISA array. SmartProxy handles the object's persistence at its own destruction time (in a DESTROY block).
This seems to happen reliably, thoough I did implement a cache class for the dual purpose of speeding up in-memory access and acting as a container for flyweights (SmartProxy objects) to be destroyed all at once. Only the first purpose is being exercised since I prefer to have database I/O (during object destruction adn subsequent persistence) handled as needed.