package Somepackage; use Exporter; our @ISA = qw(Exporter); our @EXPORT_OK = qw($SOME_VAR); our $SOME_VAR = 123; 1; use Somepackage qw($SOME_VAR); print "It is: $SOME_VAR\n"; #### ## ## BEGIN makes available the variable $SOME_VAR, these declarations are ## read from a database in reality. ## sub BEGIN { my $varName = 'SOME_VAR'; my $varValue = 123; ## ## Dynamically create the package ## my $code = qq/ package Somepackage; use Exporter; our \@ISA = qw(Exporter); our \@EXPORT_OK = qw(\$$varName); our \$$varName = $varValue; 1; /; print $code, "\n"; eval $code; ## ## Leaving out this line makes the "use Somepackage qw($SOME_VAR) fail (Can't locate package ## Somepackage.pm in @INC ...). ## $INC{"Somepackage.pm"} = 'abc'; } ## ## Let's use it. ## use Somepackage qw($SOME_VAR); ## ## And see if it's defined. ## print "Var is $SOME_VAR\n";