I've encountered this same problem before: the fact everything has to be explicitly shared. This becomes a even bigger problem if the data structure is produced by somebody else's code (such as XML::Simple). I've resorted to freez/thaw and share the serialized scalar.
Comment on Re: "Auto" vivifying shared data structures
This, too, is an option I was considering. But I didn't know about freeze and thaw in the Storable package. (I was going to use Data::Dump and eval. Yecch!) Thanks for the pointer!