With caveats similar to kyle's fork example, if a clone is acceptable, you might consider stringifying $self with Data::Dumper and/or overloading $self's stringification so you can easily obtain a clone.
Or just storing it with DBM::Deep which properly understands Perl objects, works with multiple processes accessing it simultaneously, and has transactions.
My criteria for good software:
Does it work?
Can someone else come in, make a change, and be reasonably certain no bugs were introduced?