http://www.perlmonks.org?node_id=575615


in reply to Re: Sharing Across Packages
in thread Sharing Across Packages

In the ABOUT package, how to I include the main package.
I am getting the following error when I try this $main::MW.
Can't locate main.pm in @INC (@INC contains: . C:/Perl/lib C:/Perl/sit +e/lib) atline 8.
I used Data Dumper and the variable is UNDEF.

use main?????
use bpp.pl (the main file name)????

thanks

Replies are listed 'Best First'.
Re^3: Sharing Across Packages
by polettix (Vicar) on Sep 30, 2006 at 00:41 UTC
    You don't need to include anything, packages are always there for you! By default, you *are* in package main unless you specify otherwise. An example will be hopefully useful:
    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!'
    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.

    As you can see (line 7), by default we're in package main.

    Flavio
    perl -ple'$_=reverse' <<<ti.xittelop@oivalf

    Don't fool yourself.