sub outer {
...
sub inner {
}
...
}
####
{
my $hidden_data;
sub one {
...
access the $hidden_data;
...
}
sub two {
...
access the $hidden_data;
...
}
}
####
sub outer {
my $lexical = ...;
...
my $inner = sub { ...; access $lexical; ... };
...
$inner->(...);
#or even
return $inner;
}
####
my $hash{key} = ...; # is illegal
local $hash{$key} = ...; # is legal
#on the other hand
my $x = 1;
{
my $x = 2; # is legal, a new variable was created, outer $x is not visible
}
#while
my $x = 1;
{
local $x = 2; # is illegal. Can't localize a lexical variable
####
our $variable = 15;
{
local $variable = 33;
sub one {
print "in one(): \$variable = $variable\n";
}
sub two {
print "in two(): \$variable = $variable\n";
}
}
one();
two();
$variable = 99;
one();
two();
####
our $variable = 15;
{
my $variable = 33;
sub one {
print "in one(): \$variable = $variable\n";
}
sub two {
print "in two(): \$variable = $variable\n";
}
}
one();
two();
$variable = 99;
one();
two();