# # This is the file My/Types.pm # package UNIVERSAL; use strict; use warnings; sub create { my $class = $_ [0]; print "Creating class $class\n"; eval <<"--"; package $class; sub create { my \$class = shift; print "Now inside \${class}::create\n"; bless [] => \$class; } -- no strict 'refs'; my $sub = "${class}::create"; goto &$sub; } 1; __END__ #!/usr/bin/perl use strict; use warnings; use My::Types; my $typeA1 = create TypeA; my $typeA2 = create TypeA; my $typeB1 = create TypeB; __END__ Creating class TypeA Now inside TypeA::create Now inside TypeA::create Creating class TypeB Now inside TypeB::create