That's not entirely true:
my $name; $name = 'red'; *$name = sub { "<FONT COLOR='$name'>@_</FONT>" }; $name = 'blue'; *$name = sub { "<FONT COLOR='$name'>@_</FONT>" }; $name = '<none>'; print red(), "\n"; print blue(), "\n"; __END__ <FONT COLOR='<none>'></FONT> <FONT COLOR='<none>'></FONT>
... but when the same is done in a loop, with a lexical variable declared beforehand, the result changes:
my $name; for $name ('red', 'blue') { *$name = sub { "<FONT COLOR='$name'>@_</FONT>" }; }; $name = '<none>'; print red(), "\n"; print blue(), "\n"; __END__ <FONT COLOR='red'></FONT> <FONT COLOR='blue'></FONT>
The behaviour changes again, if you use a global:
# global $name; for $name ('red', 'blue') { *$name = sub { "<FONT COLOR='$name'>@_</FONT>" }; }; $name = '<none>'; print red(), "\n"; print blue(), "\n"; __END__ <FONT COLOR='<none>'></FONT> <FONT COLOR='<none>'></FONT>
In reply to Re^2: How do closures and variable scope (my,our,local) interact in perl?
by Corion
in thread How do closures and variable scope (my,our,local) interact in perl?
by ELISHEVA
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |