Introduction to mod_perl (part 4): Perl Basics - Using the Perl Aliasing Feature to Share Global Variables (Page 5 of 9 )
As the title says you can import a variable into a script or modulewithout using Exporter.pm. I have found it useful to keep all theconfiguration variables in one module My::Config. But then I haveto export all the variables in order to use them in other modules,which is bad for two reasons: polluting other packages' name spaceswith extra tags which increases the memory requirements; and addingthe overhead of keeping track of what variables should be exportedfrom the configuration module and what imported, for some particularpackage. I solve this problem by keeping all the variables in onehash %c and exporting that. Here is an example of My::Config:
package My::Config;
use strict;
use vars qw(%c);
%c = (
# All the configs go here
scalar_var => 5,
array_var => [qw(foo bar)],
hash_var => {
foo => 'Foo',
bar => 'BARRR',
},
);
1;
Now in packages that want to use the configuration variables I haveeither to use the fully qualified names like $My::Config::test,which I dislike or import them as described in the previous section.But hey, since I have only one variable to handle, I can make thingseven simpler and save the loading of the Exporter.pm package. Iwill use the Perl aliasing feature for exporting and saving thekeystrokes:
package My::HTML;
use strict;
use lib qw(.);
# Global Configuration now aliased to global %c
use My::Config (); # My/Config.pm in the same dir as script.pl
use vars qw(%c);
*c = \%My::Config::c;
# Now you can access the variables from the My::Config
print $c{scalar_var};
print $c{array_var}[0];
print $c{hash_var}{foo};
Of course $c is global everywhere you use it as described above, andif you change it somewhere it will affect any other packages you havealiased $My::Config::c to.
Note that aliases work either with global or local() vars - youcannot write:
my *c = \%My::Config::c; # ERROR!
Which is an error. But you can write:
local *c = \%My::Config::c;
For more information about aliasing, refer to the Camel book, secondedition, pages 51-52.
Next: Using Non-Hardcoded Configuration Module Names >>
More Perl Articles
More By Stas Bekman