I cheat, personally. I have a program which loads all of its contents from an XML file.
I think I've got this down the bare minimum required to be a useful example. (there's a few different type of config parameters, not all of which get exported, and logic for adding new values)
package Physics::Solar::VSO::Config; use strict; use warnings; our $VERSION = 1.01_04; require Exporter; our @ISA = qw(Exporter); our @EXPORT = (); # @EXPORT_OK is below. use XML::Simple; my $parserOptions = { cache => [ 'memshare' ], NoAttr => 1, SuppressEmpty => undef, }; ( my $configFile = __FILE__ ) =~ s/\.pm$/.xml/; my $config ||= XMLin( $configFile, %$parserOptions ); our %CONFIG : unique = ( %{ $config->{'CONFIG'} || {} } ); sub AUTOLOAD { (my $constant = our $AUTOLOAD) =~ s/^.*://; no strict 'refs'; if (exists($CONFIG{$constant})) { *{$AUTOLOAD} = sub { return $CONFIG{$constant} }; return &{$AUTOLOAD}; } else { require Carp; Carp::croak "Unknown constant : $constant"; } } @Physics::Solar::VSO::Config::EXPORT_OK = ( keys %CONFIG );
Update: You'd of course want to swap EXPORT_OK and EXPORT, so you don't have to pass in which constants you wanted to import (also cleaned up a typo, and split a paragrah)
In reply to Re: How to include a large number of constants?
by jhourcle
in thread How to include a large number of constants?
by noslenj123
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |