# Module.pm
use warnings;
package Module;
my $thingy = 'thangy';
sub doit { eval 'print "thingy is $thingy\n"'; }
1;
####
use Module;
Module::doit(); # "thingy is "
##
##
{
use warnings;
package Module;
my $thingy = 'thangy';
sub doit { eval 'print "thingy is $thingy\n"'; }
1;
}
Module::doit(); # "thingy is "
##
##
{
use warnings;
my $thingy = 'thangy';
sub doit { eval 'print "thingy is $thingy\n"'; }
}
doit(); # "thingy is "
##
##
{
use warnings;
my $thingy = 'thangy';
sub doit { print "thingy is $thingy\n"; }
}
doit(); # "thingy is thangy"
##
##
{
use warnings;
my $thingy = 'thangy';
sub doit { my $ref = \$thingy; # Close over $thingy
eval 'print "thingy is $$ref\n"'; }
}
doit(); # "thingy is thangy"
##
##
{
use warnings;
my $thingy = 'thangy';
sub doit { my $thingy = $thingy; # Close over $thingy
eval 'print "thingy is $thingy\n"'; }
}
doit(); # "thingy is thangy"
##
##
{
use warnings;
our $thingy = 'thangy';
sub doit { eval 'print "thingy is $thingy\n"'; }
}
doit(); # "thingy is thangy"