Beefy Boxes and Bandwidth Generously Provided by pair Networks
Pathologically Eclectic Rubbish Lister
 
PerlMonks  

Re: undef == 0?

by Fletch (Bishop)
on Oct 24, 2007 at 16:25 UTC ( [id://646927]=note: print w/replies, xml ) Need Help??


in reply to undef == 0?

Since the undefined value in a numeric context is treated as 0 why should it?

Granted it may be surprising coming from different context (say Ruby where nil is not equal to anything but itself), but by the way undef is defined in Perl that's just the way it is. But if you're using warnings you will get whinged at for doing so.

Replies are listed 'Best First'.
Re^2: undef == 0?
by stu42j (Sexton) on Oct 24, 2007 at 16:39 UTC
    Well, that's really my question. "Why is an undefined value treated as zero in numeric context?" That still doesn't really make sense to me.

    I forgot about the warning though which means I need to add a defined in there. Then the problem goes away.

      As everyone else has asked, what number would you propose it be treated as?

      Perl doesn't have a single equality operator, it has two which operate on specific types of values:

      • == / != for numeric values
      • eq / ne for string values

      A numeric value gets promoted to its string representation when used as a string. A string value gets converted to a numeric value (if possible; 0 if it's not a valid numeric representation) when used as a number.

      So when you consider what could be done with the "wrong" kind of value in a given context there's two possibilities:

      • treat it as a domain error (you're not allowed to compare these two types of values; see my Ruby example)
      • convert it to a value in the correct domain (which is what Perl does)

      Given that the second choice was made, again what other value would you expect? I might could see an argument being made for NaN, but the choice of 0 makes lots of things "just work" nicely (especially for things like quick 1-liners or 5 minute throw-away scripts where you really aren't that concerned with data validation).

        I certainly understand operator based context and all that stuff that makes Perl so Special (well, obviously not all of it). I guess I just never really thought about what numerical value undef should have. My understanding of undefined is that it shouldn't have any value at all, by definition. I suppose that something like NaN would be closest to my expectations.

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://646927]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others taking refuge in the Monastery: (6)
As of 2024-04-25 15:28 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found