$class_name = "Calvin::Hobbes"; # from some value above
my $new_object = $class_name->new;
####
if (grep $class_name eq $_, qw(Calvin::Hobbes Peter::Gabriel Dog::Day::Afternoon)) {
# must validate the name, or security holes will run rampant
eval "require $class_name"; die $@ if $@;
$object = $class_name->new;
}
##
##
my %make_a = qw(
Calvin::Hobbes new
Peter::Gabriel play
Dog::Day::Afternoon watch
);
...
if (my $constructor = $make_a{$class_name}) {
unless ($INC{$class_name}) {
eval "require $class_name"; die $@ if $@;
}
$object = $class_name->$constructor();
}