As a note...

If I specify the variables in the 'use' statement (ie. use SI::env 
qw($mysqlhost $mysqluser $mysqluser $mysqlpass $db_prefix die_error);), the 
problem goes away.

I thought the idea behind @EXPORT was to not have to do that.

TIA

Walter Grace

At 05:22 PM 10/29/01 -0400, you wrote:

>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
>



-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to