I’m just trying to think of a rule by which this could be made consistent and non-surprising, but failing to. I suppose it would be okay to disambiguate the desired behaviour for lexicals on the presence of a my on the loop construct – but then what about globals? Should they always be aliased? I don’t like that – I’d definitely want parity here, else people are going to have to be taught about the subtlety that foreach behaves differently when given a global than when given a lexical. Maybe require foreach our $pkgvar to get aliasing for package variables? That would be strange, though, considering the actual semantics of our. And then what about $_ – do we leave it as a strange exception case?
Given that it would be so difficult to find sane semantics to support the non-aliasing behaviour, as well as that IME you want the aliasing behaviour 99.9% of the time, I think it’s clear why my preference is to just punt on this issue. I understand why you would prefer it otherwise, and I agree that it would be nice to have this behaviour, but I think there are just too many issues to untangle once you venture past the use case in your sample code.
Maybe TimToady could let this all stew for a while and come up with one of his trademark lucid decompositions, but I can’t think of anything more desirable than the current 80/20 solution.
Makeshifts last the longest.
In reply to Re^9: no chunk is too small
by Aristotle
in thread Last undefines a for loop's itererator?
by BUU
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |