Your excellent examples of my misuse all boil down to context errors. Another gotcha happens when subs are defined to access lexical variables outside their definition. That makes an accidental closure, giving previous calls influence over the state of subsequent ones. That is a source of almighty difficult heisenbugs.
In effect, local produces a temporary namespace. All code executed within its scope thinks that global variables have the values found in that local namespace. That means you can redefine local $/, *STDERR, $^W, or *CORE::GLOBAL::print, and every sub or builtin called within that scope will honor the new definitions. It is a very handy way to obtain dynamic polymorphism.
When the local namespace goes out of scope, the previous values are back as if nothing had happened.
After Compline,
Zaxo
In reply to Re: nuances of my, and maybe local
by Zaxo
in thread nuances of my, and maybe local
by Helter
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |