Vance E. Neff wrote:
 I have a module options.pm defined as:
<pre>
package options;
use strict;
use base qw(Exporter);
our @EXPORT = qw(@BenefitsOptions %BenefitsOptions);
our @EXPORT_OK = qw();

our %BenefitsOptions =    (
    "Dental"    =>    1,
    "Full"        =>    2,
    "Base"        =>    3,
    "Comm."        =>    4,
    "END"
    );
@BenefitsOptions = ();

1;
</pre>

and at the beginning of each of my CGI programs I have the line:
use options;

each program may access the variables defined in options.pm and may call other .pm modules that also need to have access to those same options.pm variables and those .pm modules might call another.pm modules that need to access those same variables defined in options.pm.

I read the perlmod, perlobj, Exporter, perltoot and frankly, I'm now more confused then ever.
I tried putting the variable declarations in a BEGIN block with no success.

I'm getting the error:
Global symbol "xx" requires explicit package name at module.pm line nn.

I for one get: "Global symbol "@BenefitsOptions" requires explicit package name at options.pm line 14."

Besides that, you need to realize that when you say

    use options;

in your script, you import the symbols into the package where that statement is placed, probably package main. The variables are indeed available also in other packages, but you need to either say

    use options;

in each of those modules as well, or use the fully qualified name, e.g.

    %options::BenefitsOptions

What is the best way to do this?

One way is to make use of the %ENV hash.

    $ENV{BenefitsOptions} = {
        Dental  => 1,
        Full    => 2,
        Base    => 3,
        'Comm.' => 4,
    };

Then you can say anywhere in your program:

    foreach ( keys %{ $ENV{BenefitsOptions} } ) {
        print "$_ = $ENV{BenefitsOptions}->{$_}\n";
    }

--
Gunnar Hjalmarsson
Email: http://www.gunnar.cc/cgi-bin/contact.pl

--
To unsubscribe, e-mail: beginners-cgi-unsubscr...@perl.org
For additional commands, e-mail: beginners-cgi-h...@perl.org
http://learn.perl.org/


Reply via email to