Thanks for your answer Bob! 0-)
However, I already had this set up as you describe and I am getting a
"requires explicit package name" error when I try to use a variable from
the module exporting its variables.
There are two differences that I see between what I did and what you show:
The first is that I am using "use Exporter" vs. "require
Exporter". I made this change just to see if that was my problem, but
it was not.
The second is that I am specifying a subroutine on the importing
module's 'use' statement.
Below is what I have.
Export module:
package SI::env;
use strict;
use vars qw(
@ISA @EXPORT @EXPORT_OK $Debug
$mysqlhost $mysqluser $mysqluser $mysqlpass $db_prefix
);
use subs qw(get_site);
use Exporter;
@ISA = qw(Exporter);
@EXPORT = qw(
$mysqlhost $mysqluser $mysqluser $mysqlpass $db_prefix
);
@EXPORT_OK = qw(debug_Print die_error get_site print_env);
,,,
Import module:
package SI::database;
use strict;
use vars qw(@ISA @EXPORT @EXPORT_OK $Debug $dbh);
use Exporter;
use DBI ();
use SI::env qw(die_error);
@ISA = qw(Exporter);
@EXPORT = qw($dbh);
@EXPORT_OK = qw(db_connect read_table update_raw_database);
...
At 04:57 PM 10/29/01 -0500, you wrote:
> > -----Original Message-----
> > From: Walter Grace [mailto:[EMAIL PROTECTED]]
> > Sent: Monday, October 29, 2001 3:21 PM
> > To: [EMAIL PROTECTED]
> > Subject: Exported variables
> >
> >
> >
> > I have a variable in a module that I export (e.g. @EXPORT =
> > qw( $variable ); )
> >
> > Do I have to de-reference (terminology?) it in any other
> > modules or scripts
>
>"fully qualify" not "de-reference"
>
> > that include the given module (ie. $module::variable) or is
> > there a way to
> > import the variable so that I can refer to it directly?
>
>That's the whole idea behind @EXPORT.
>
>There are three ingredients to exporting symbols:
>
>1. Your module needs to inherit from Exporter. This is done by adding
> "Exporter" to @ISA:
>
> require Exporter;
> our @ISA = qw(Exporter);
>
>2. You need to include the symbols to be exported in @EXPORT or
> @EXPORT_OK.
>
> @EXPORT_OK = qw($foo $bar $baz);
>
>3. Users of your module need to bring it in with "use":
>
> use MyModule;
>
>"use" does two things: 1) require() your module, and 2) call your module's
>import() method. Since your module inherits from Exporter and normally does
>not override the import() method, Exporter's import() method get's called.
>It's default behavior is to export all the symbols defined in @EXPORT_OK
>to the package namespace which did the "use".
>
>If you do these 3 things, you can refer to $foo, $bar, and $baz without
>qualifying with a package name, since an alias for those symbols was
>created in your current package.
>
>For lots more info, see
>
> perldoc -f use
> perldoc Exporter
> perldoc perlmod