Update: Interestingly, I can not duplicate your exact problem on linux; I can only duplicate it on windows. Here is my hypothesis. There is a core module named Test. On windows, file names are case-insensitive. When I do use test; (lower-case), I think perl actually loads Test which is in the @INC path before ./test.pm. Add this to your main.pl script:
use Data::Dumper;
print Dumper(\%INC);
Since Test does not have a variable named $x, I get the same error you get. In any case test.pm is not a very unique name, and it should be changed --- even for contrived examples.
Also, you should be using warnings.
Here is my original reply (which is still good advice):
Declare your variable with our inside your package:
package test;
use strict;
use Exporter;
our @ISA = qw(Exporter);
our @EXPORT = qw($x);
our $x = "hi";
__END__
That solves your immediate problem. However, you may want to heed the advice in What not to Export:
Exporting variables is not a good idea. They can change under the hood, provoking horrible effects at-a-distance, that are too hard to track and to fix. Trust me: they are not worth it.
|