sub TypeA { return "Class::SubclassA" } sub TypeB { return "Class::SubclassB" } sub create { my $class = shift; if (shift eq "B") { return $class->TypeB->new(@_); } else { return $class->TypeA->new(@_); } }