in reply to create an object where type is a variable

Yes, no problem. You can also use a variable in the whole process. For example if you need to load a series of modules,
my %objects; for my $class (@available_classes) { eval qq(require $class); if ($@) { # you can make it die() here, if you want warn "Failed to load class '$class': $@"; next; } $objects{$class} = $class->new; }
Because the way require works, you have to eval the require $class statement in double quotes so the $class becomes bareword.

Or, you may have to pick a correct class by certain criteria. You can use UNIVERSAL::require in place of the eval statement and $@ checking.

use UNIVERSAL::require; my $class = get_implementor_class(); #defined somewhere $class->use or die $@; my $object = $class->new;

Open source softwares? Share and enjoy. Make profit from them if you can. Yet, share and enjoy!