[Phoenix-pm] Fwd: ++ turns undef into 0 first
Scott Walters
scott at illogics.org
Tue Sep 6 14:11:47 PDT 2005
Here's an interesting gotcha sent to the perl-porters list:
----- Forwarded message from Peter Scott <Peter at PSDT.com> -----
From: Peter Scott <Peter at PSDT.com>
Subject: ++ turns undef into 0 first
This recently bit me:
$ perl -wle 'print 42 if defined($h{foo}++)'
42
Now, before thousands of you reach for the flamethrowers, yes, I know
- now - that this is documented. I found it in perlop right where it
ought to be:
| undef is always treated as numeric, and in particular is changed to 0
| before incrementing (so that a post-increment of an undef value will
| return 0 rather than undef).
The only thing that perturbs me is that I had to find this after I was
starting to wonder whether there was a bug. So this looks to me like
suboptimal behavior that has been documented; any chance of making it
behave the more logical way, i.e., that the expression evaluates to the
original value and not some modified one? I can't imagine there is much
code relying on the current behavior.
--
Peter Scott
http://www.perlmedic.com/
http://www.perldebugged.com/
----- End forwarded message -----
More information about the Phoenix-pm
mailing list