use Scalar::Util qw( blessed ); sub new { my $class = shift; return $class->clone( @_ ) if blessed $class; # Continue on with constructor. } sub clone { my $self = shift; return $self->new( @_ ) unless blessed $self; # Continue on with cloner. }