As rafl said, this can be achieved through symbolic references, but they are quite dangerous (they are a code injection vector) and don't work with lexical variables (and should be using lexical variables instead of package variables). Whenever you think you want a symbolic reference, you almost certainly want a hash instead. Instead of saying:
#$this_is_test is really $main::this_is_test and is accessible from anywhere
#including other packages if they use the $main::this_is_test form
our $this_is_test = "what ever";
my $default = "this";
$default = ${ $default . "_is_test" };
You can say:
my %user_vars = ( this_is_test => "what ever" );
my $default = "this";
$default = $user_vars{ $default . "_is_test" };
This limits the scope of %user_vars
to the block in which it was created and the segregation of the keys from the real variables limits that danger of injection attacks.