package App::Backend; use App::Config; use base "App::Backend::App::$Config::Backend_Type"; sub shared_method_1 { my $self = shift; #.... } # ... the rest of the module... 1; #### sub type { my $self = shift; return 'SQL'; } #### sub type { my $self = shift; return 'PlainText'; } #### #!/usr/bin/perl use Test::More qw(no_plan); for(qw(PlainText SQL){ require App:Config; $App::Config::Backend_Type = $_; require App::Backend; ok($App::Config::Backend_Type eq $_); my $backend = App::Backend; ok($backend->type eq $_); # Wrong! }