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();