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;
}