sub HollyGame::ElfRanger::new { my( $class, %options ) = @_; $options{ class } = HollyGame::Ranger->new(...); $options{ race } = HollyGame::Elf->new(...); bless \%options => $class; } #### sub HollyGame::RaceClassBase::new { my( $class, %options ) = @_; my( $race, $class ) = ($class =~ /::([A-Z][a-z]+)([A-Z][a-z]+)/); $options{ class } = "HollyGame::$class"->new(...); $options{ race } = "HollyGame::$race"->new(...); bless \%options => $class; } package HollyGame::ElfRanger; use base 'HollyGame::RaceClassBase'; ... HollyGame::ElfRanger->new(); #### sub new { my( $class, %options) = @_; # rename from "tobechangedname" to "newname" my $optval = delete $options{ tobechangedname }; $options{ newname } = $optval; bless \%options => $class; }