What that's really doing is co-opting your constructor (typically called new()) and using it as a copy function, (typically called copy() or clone()).
I have rarely seen the equivalent of a copy constructor in someone's new method. Rather, I've seen the
my $class = ref $proto || $proto;
trick used to add "make me a new one of these" semantics to the standard "make me a new instance of this package" semantics.
If you're restricted to created instances of a named class, you have extra hoops to jump through to extend your software to accomodate new subclasses. By adding a "make me new one of these" capability, you defer past compile-time the decision of what package to create a new copy of.