Polymorphic data cloninghttp://search.cpan.org/dist/Data-Clone
"Data::Clone" does data cloning, i.e. copies things recursively. This is
smart so that it works with not only non-blessed references, but also with
blessed references (i.e. objects). When "clone()" finds an object, it
calls a "clone" method of the object if the object has a "clone",
otherwise it makes a surface copy of the object. That is, this module does
polymorphic data cloning.
Although there are several modules on CPAN which can clone data, this
module has a different cloning policy from almost all of them. See
"Cloning policy" and "Comparison to other cloning modules" for details.