my $obj = Class->new(...your args...); my $subobj = Class::SubClass->clone_from_parent($obj); package Class::SubClass; ... sub clone_from_parent { my $class = shift; my $obj = shift; my %args; ...set up %args by calling methods on $obj to get info... return __PACKAGE__->new(\%args); }