Beefy Boxes and Bandwidth Generously Provided by pair Networks
"be consistent"
 
PerlMonks  

comment on

( [id://3333]=superdoc: print w/replies, xml ) Need Help??

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")

In reply to (tye)RE: What are all the false values in Perl by tye
in thread What are all the false values in Perl ((conditional, boolean, whitespace, unprintable characters) by princepawn

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post; it's "PerlMonks-approved HTML":



  • Are you posting in the right place? Check out Where do I post X? to know for sure.
  • Posts may use any of the Perl Monks Approved HTML tags. Currently these include the following:
    <code> <a> <b> <big> <blockquote> <br /> <dd> <dl> <dt> <em> <font> <h1> <h2> <h3> <h4> <h5> <h6> <hr /> <i> <li> <nbsp> <ol> <p> <small> <strike> <strong> <sub> <sup> <table> <td> <th> <tr> <tt> <u> <ul>
  • Snippets of code should be wrapped in <code> tags not <pre> tags. In fact, <pre> tags should generally be avoided. If they must be used, extreme care should be taken to ensure that their contents do not have long lines (<70 chars), in order to prevent horizontal scrolling (and possible janitor intervention).
  • Want more info? How to link or How to display code and escape characters are good places to start.
Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others musing on the Monastery: (9)
As of 2024-04-23 09:36 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found