The last part of your post might misled people to think that our is a must for removing the syntax error. So just a little bit more detail...
Remove the package qualifier, but keep local, it results syntax error:
use strict;
use warnings;
package Foo;
local $bar;
sub init {
$bar = 42;
}
1;
Global symbol "$bar" requires explicit package name at Foo.pm line 6.
Global symbol "$bar" requires explicit package name at Foo.pm line 9.
Global symbol "$bar" requires explicit package name at Foo.pm line 10.
Foo.pm had compilation errors.
But use either my or our removes the error:
use strict;
use warnings;
package Foo;
my $bar;
sub init {
$bar = 42;
print $bar;
}
1;
But the use of our or my does make difference in other sense. The following script works when $bar is defined with our:
use strict;
use warnings;
use Foo;
Foo::init();
print $Foo::bar;
But does not work if $bar is defined with my:
Name "Foo::bar" used only once: possible typo at math1.pl line 7.
Use of uninitialized value in print at math1.pl line 7.
my or our? depends on what you want to do - in what scope you want your variables to be seen. |