Beefy Boxes and Bandwidth Generously Provided by pair Networks
laziness, impatience, and hubris

Re: How come undef eq '' ??

by muba (Priest)
on Jan 30, 2013 at 15:52 UTC ( #1016090=note: print w/ replies, xml ) Need Help??

in reply to How come undef eq '' ??

Because perl does a lot of automatic data type coercion for you if it's needed.

If undef didn't stringify to "", then what output should this produce?

print "a" . undef . "b";

With undef stringifying to "", this neatly prints "ab". If undef would stringify to, say, "undef", like how Javascript's null stringifies to "null", the above code would output "aundefb", which hardly seems desireable.

If you need to test for definedness of a value, then you have your defined function, or your defined-or // operator.

In your last code snipped,

perl -e 'my $tmp; if( $tmp and ( $tmp eq "" ) ) { print "In\n" } else +{ print "Out\n" }' Out
what output did you expect? Why?

The reason you're getting "Out" here is not because of how undef stringifies, it's because of undef being considered false. So in the expression $tmp and ( $tmp eq "" ), the and operator looks at its left-hand side, concludes that it's false, and so returns false, causing your if-else to jump to the else part right away. Whether or not ($tmp eq "") is never evaluated in that snippet.

Addendum: the raison d'être of undef is that it can convey the meaning of "there is no valid value for what you asked for," for example if you have a function that returns the next paragraph from some document, then "" would mean that the next paragraph is empty, and undef would mean that there is no next paragraph.

Comment on Re: How come undef eq '' ??
Select or Download Code

Log In?

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

How do I use this? | Other CB clients
Other Users?
Others lurking in the Monastery: (5)
As of 2016-05-30 01:47 GMT
Find Nodes?
    Voting Booth?