Beefy Boxes and Bandwidth Generously Provided by pair Networks
go ahead... be a heretic

RE: RE (tilly) 2: What are all the false values in Perl ((conditional

by dchetlin (Friar)
on Sep 23, 2000 at 00:31 UTC ( #33703=note: print w/replies, xml ) Need Help??

in reply to RE (tilly) 2: What are all the false values in Perl ((conditional
in thread What are all the false values in Perl ((conditional, boolean, whitespace, unprintable characters)

That's not a list, that's the binary comma operator. Any non-empty list is true. It may look like a list, but it's not one.


Hmm, "Any non-empty list is true" was a dumb thing to say, as tye and tilly pointed out.

It reminds me of an MJD quote:

"If there is a giant purple water buffalo returned from a function, then $h = func() will always give you the length of its nose."

In other words, any non-empty list is true because you never have a list in boolean context.

However, I do stand by my first and third sentences in the original post. I think it's misleading to say if (1,0) or even if @array[0,2,1] is a list.

It is, obviously, a complicated topic.

Replies are listed 'Best First'.
(tye)RE: What are all the false values in Perl
by tye (Sage) on Sep 23, 2000 at 00:55 UTC

    I completely agree that the so-called "list" in tilly's example is better referred to as "use of the comma operator". I also (think that I mostly) agree with the statement that "an empty list is false". I can't come up with a (non-contrived) situation where that is not the case. But I think that phrase is on a slippery slope to much confusion.

    The term "list" has no formal definition in Perl lingo. This is a source of much confusion for people ranging from Perl newbie to the Perl illuminati. The problem is made worse by several knowledgeable people talking as if there was a formal meaning (including in the Perl standard documentation where "list" is used to mean contradictory things without noting that "list" on one page may not be talking about the same thing as an occurrance of "list" on another page). This is also made worse because the terms "list context", "scalar context", and "scalar" all have formal meanings in Perl (which makes it easy to infer that "list" would also have a formal meaning).

    I'll also disagree that boolean evaluation provides a void context. It provides a scalar context as proven by:

    sub want { if( ! defined wantarray ) { warn "void context\n"; } elsif( ! wantarray ) { warn "scalar context\n"; } else { warn "array context\n"; } return 1; } if( want ) { # scalar context print want,"\n"; # array context } want; # void context __END__ This prints: scalar context array context 1 void context

    Note that scalar context has several "subcontexts" that wantarray can't detect. These include "scalar" ($x= want), "string" ($x= "".want), "numeric" ($x=  0+want), "integer" ($x= 0|want), and "boolean" ($x= !want). It is a bit of a stretch to call these "contexts" with any current version of Perl because most operators don't know which of these contexts they are in.

    Finally, I have to disagree with the statement that "a non-empty list is true". This is further down the slope of confusion. There are so many things that could be called "a non-empty list". Many of those will yield a true value in a boolean context. But there are many operations that would return a non-empty list in a list context but would return a false value in a boolean context. tilly gives one example. Perhaps this is a better example:

    my @array=(-1,0,1); print "true\n" if @array[0,2,1];
    which doesn't print anything.

            - tye (but my friends call me "Tye")
      This is a source of much confusion for people ranging from Perl newbie to the Perl illuminati.

      Shhh! You aren't supposed to tell people that there is a Perl Illuminati... In fact, What Illuminati? How many times do I have to tell you there is no secret Perl society!!!


        Mea Culpa. I can neither confirm nor deny the existence of the Perl Illuminati (unless you can show me the secret handshake).

                - tye (but my friends call me "Tye")

Log In?

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

How do I use this? | Other CB clients
Other Users?
Others exploiting the Monastery: (6)
As of 2022-12-06 14:25 GMT
Find Nodes?
    Voting Booth?

    No recent polls found