develooper Front page | perl.perl5.porters | Postings from August 2005

++ turns undef into 0 first

Thread Next
From:
Peter Scott
Date:
August 19, 2005 02:31
Subject:
++ turns undef into 0 first
Message ID:
pan.2005.08.18.17.49.29.849333@PSDT.com
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/


Thread Next


nntp.perl.org: Perl Programming lists via nntp and http.
Comments to Ask Bjørn Hansen at ask@perl.org | Group listing | About