#!/usr/bin/perl -w
package Szywiecki;
$Robert = "the boss";
sub terminate {
my $name = shift;
print "$Robert has canned $name's sorry butt\n";
}
terminate("arturo"); # prints "the boss has canned arturo's sorry butt"
####
#!/usr/bin/perl -w
use strict;
$Robert = "the boss";
print "\$Robert = $Robert\n";
##
##
#!/usr/bin/perl -w
use strict;
$main::Robert = "the boss";
print "\$main::Robert = $main::Robert\n";
##
##
#!/usr/bin/perl -w
package Szyewicki;
$Robert = "the boss";
package PoolHall;
$Robert = "the darts expert";
package Sywiecki; # back to work!
print "Here at work, 'Robert' is $Robert, but over at the pool hall, 'Robert'
is $PoolHall::Robert\n";
##
##
#!/usr/bin/perl -w
use strict;
#remember we're in package main
use vars qw($foo);
$foo = "Yo!"; # sets $main::foo
print "\$foo: $foo\n"; # prints "Yo!"
my $foo = "Hey!"; # this is a file-level my variable!
print "\$foo: $foo\n"; # prints "Hey!" -- new declaration 'masks' the old one
{ # start a block
my $foo = "Yacht-Z";
print "\$foo: $foo\n";
# prints "Yacht-Z" -- we have a new $foo in scope.
print "\$main::foo: $main::foo\n";
# we can still 'see' $main::foo
subroutine();
} # end that block
print "\$foo: $foo\n"; # there it is, our file-level $foo is visible again!
print "\$main::foo: $main::foo\n"; # whew! $main::foo is still there!
sub subroutine {
print "\$foo: $foo\n"; # prints "Hey!"
# why? Because the variable declared in the naked block
# is no longer in scope -- we have a new set of braces.
# but the file-level variable is still in scope, and
# still 'masks' the declaration of $main::foo
}
package Bar;
print "\$foo: $foo\n"; # prints "Hey!" -- the my variable's still in scope
# if we hadn't made that declaration above, this would be an error: the
# interpreter would tell us that Bar::foo has not been defined.
##
##
#!/usr/bin/perl -w
use strict;
use vars qw ($foo); # or "our $foo" if you're using 5.6
$foo = "global value";
print "\$foo: $foo\n"; # prints "global value"
sub mysub {
my $foo = "my value";
showfoo(); # prints "global value"
}
sub localsub {
local $foo = "local value";
showfoo(); # prints "local value
}
sub showfoo {
print "\$foo: $foo\n";
}