Note that you have two warnings regarding line 12. The first one is given during the compilation phase, and refers to the misterious "Whatever::MW" variable. This stems from the fact that, when not using strict, every variable you use actually is the corresponding package variable (in the current package). In line 9 we're entering package "Whatever", so there you are. The second warning happens at run time, when you try to print the content of this variable, that is undefined.poletti@PolettiX:~/sviluppo/perl$ nl mikasue.pl 1 #!/usr/bin/perl 2 use strict; 3 use warnings; 4 { # scope reduction 5 our $MW = "Hello, mikasue!"; 6 print "\$MW is '$MW'\n"; 7 print "Current package is ", __PACKAGE__, "\n"; 8 print "\$main::MW is '$main::MW'\n"; 9 } # end of "our" scope 10 package Whatever; 11 no strict; # note: no strict here! 12 print "\$MW is '$MW'\n"; 13 print "Current package is ", __PACKAGE__, "\n"; 14 print "\$main::MW is '$main::MW'\n"; poletti@PolettiX:~/sviluppo/perl$ perl mikasue.pl Name "Whatever::MW" used only once: possible typo at mikasue.pl line 1 +2. $MW is 'Hello, mikasue!' Current package is main $main::MW is 'Hello, mikasue!' Use of uninitialized value in concatenation (.) or string at mikasue.p +l line 12.$MW is '' Current package is Whatever $main::MW is 'Hello, mikasue!'
As you can see (line 7), by default we're in package main.
Flavio
perl -ple'$_=reverse' <<<ti.xittelop@oivalf
In reply to Re^3: Sharing Across Packages
by polettix
in thread Sharing Across Packages
by mikasue
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |