in reply to Re: Just when you thought you'd got it: 'foreach $f (@foo)' vs 'foreach (@foo)'
in thread Just when you thought you'd got it: 'foreach $f (@foo)' vs 'foreach (@foo)'
I was about to tell you that I'm not sure whether I would recommend it because the
while (<>) {...}
is associated with quite a lot of dwimmy magic that would would vanish if you amend the construct that way, but when I was about to give you an example it turned out that it was actually a counter-example showing I was plainly wrong:
pilsner:~ [11:58:42]$ perl -MO=Deparse -e 'while (<>) {}' while (defined($_ = <ARGV>)) { (); } -e syntax OK pilsner:~ [11:59:05]$ perl -MO=Deparse -e 'while (local $_=<>) {}' while (defined(local $_ = <ARGV>)) { (); } -e syntax OK
Thus perl is smart enough to still add the definedness test even in that case: I stand corrected, and you taught me something new. I am fairly sure this was not the case with all perls, but I have now tested with 5.8.8 which is the oldest one I have currently access to, and it supports this feature. I don't know when it was actually introduced. I used to believe that it would only work with a variable assignment, but not if a local (or anything else) was preprended to it...
I still feel like claiming that in most cases using while (<>) {...} responsibly would be enough.
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^3: Just when you thought you'd got it: 'foreach $f (@foo)' vs 'foreach (@foo)'
by repellent (Priest) on Oct 16, 2008 at 17:39 UTC |