But that can be done by the caller, in a clearer fashion:
my $new_thing = (ref $this_thing)->new(@params);
This clearly says to me "for the class of $this_thing, call new". Very clear.
You don't need to put (cargo-cult fashion) the "ref $proto || $proto" device
in every single constructor. The caller can control this.
If you want to provide a clone method in your class, do so. But don't try to
make "new" do double duty. It confuses those of us with some common sense.
-- Randal L. Schwartz, Perl hacker