I've only seen one useful use of this in perl and it was absolutely necessary in that case: when you've overloaded the type of dereferencing the object is based on. Data::Postponed uses scalar based objects and overloads everything including ${}. This now effectively prevents me from storing anything inside the object because I can never get access to it. The workaround is to use the object's stringification "Data::Postponed::Forever=SCALAR(0x8141758)" as a key to a global and store all of the object's internals in that global.