in reply to Re: Usage of global variables
in thread Usage of global variables

Thanks for all those comments. I have done it but i dont know how i have written the code somehow like this: The hash used here is just the declaration, it is defined dynamically.
use strict; use vars qw(%line $time); use mod1 qw(%line); use mod2 qw(%line $time);
in the main .pl file and in the .pm files it is like this
use strict; use Exporter(); use vars qw(%line);
in the mod1.pm, and
use strict; use Exporter(); use vars qw(%line $time);
in mod2.pm. Can any one explaing why and how is it working without giving any warnings.

2005-01-04 Janitored by Arunbear - added code tags, as per Monastery guidelines

Replies are listed 'Best First'.
Re^3: Usage of global variables
by tall_man (Parson) on Jan 04, 2005 at 17:12 UTC
    You aren't getting warnings, but you aren't getting what you think you are here. It would help to see more code, and please use code tags. The first problem is that you weren't really exporting.
    package mod1; use strict; use vars qw(%line); use Exporter(); # The next two lines are vital for exporting. our @ISA = qw(Exporter); our @EXPORT_OK = qw(%line); BEGIN { %line = (this => "line"); } 1;
    package mod2; use strict; use vars qw(%line $time); use Exporter(); # Same with this one. our @ISA = qw(Exporter); our @EXPORT_OK = qw(%line $time); BEGIN { %line = (that => "line2"); $time = time(); } 1;
    You have one more problem. By exporting the same name in two modules, you will be clobbering your first one.
    use strict; use vars qw(%line $time); use mod1 qw(%line); use mod2 qw(%line $time); # This will print: # that,line2 print join(",",%line),"\n";
    If you really want both packages to have their own global named %line then don't export them. Use them with package names, like this: %mod1::line.