in reply to Access to (exported?) variabes of a module

You can export variables using exactly the same Exporter mechanism as you can with subroutines. E.g:

(PackVar.pm): package PackVar; + use base Exporter; + use vars qw(@EXPORT $Test); + @EXPORT = qw($Test); + $Test = 1; + 1; (test.pl): use strict; + use PackVar; + print $Test,"\n";
which works fine. Note that the exported variables must be package and not lexical variables: you need to declare them in the module with use vars or our (or use the fully package qualified name) and not declare them with my.

However you really, really, really do want to think carefully about exporting variables like this even more than you do with subroutines as this constitutes a more serious pollution of the callers namespace with a higher risk of collision, unless you have absolutely no way around this you should use fully package qualified names (e.g. $PackVar::Test) in the caller and document this usage.

/J\

Replies are listed 'Best First'.
Re^2: Access to (exported?) variabes of a module
by Fletch (Bishop) on Jun 01, 2006 at 12:37 UTC

    It's somewhat safer if you use @EXPORT_OK rather than @EXPORT and make the caller explicitly use PackVar qw( $Test ) to get the variable in their namespace. That also documents where $Test is coming from in the using code.

    But seconded on the recommendation to prefer fully qualified names; if I don't I make sure to use the explicit import (then again I almost always use an explicit import list for subs as well . . .).