A one liner generally cannot take
Everything into
account. Since code may one day be reused in something else,
something like my first snippet will work for the current
problem but will be broken for others.
My second snippet (with Data::Dumper) will
work for most common problems of the copy type since it
expands absolutely everything before recreating the
structure. However using eval makes it likely to be slow,
possibly insecure and less reliable.
I suggest you have a good look at this article
which provides a furthur in depth discussion of deep copying (which is what we are talking about here).