# my.pl use My::Factory; my $obj = My::Factory->new('Apple'); ... # My/Factory.pm package My::Factory; 1; sub new{ my $factoryclass = shift; my $class = "My::" . shift; # My::Apple my $filename = $class; $filename =~ s/::/\//g; $filename .= '.pm'; # My/Apple.pm if ( -e $filename ) { require $filename; } else { die "not found: $filename"; } }