http://www.perlmonks.org?node_id=962930


in reply to Re: Logical Not and arguments to grep
in thread Logical Not and arguments to grep

Thanks chromatic, that explains it. I've never really considered the comma as an "operator" but will do from now.
  • Comment on Re^2: Logical Not and arguments to grep

Replies are listed 'Best First'.
Re^3: Logical Not and arguments to grep
by chromatic (Archbishop) on Apr 01, 2012 at 21:19 UTC
    I've never really considered the comma as an "operator" but will do from now.

    Neither did I for many years. Once you really understand how lists work in Perl (and why some people call the comma "the list operator"), then you understand enough about Perl's precedence and associativity that this sort of thing never trips you up much again.

    Working through the exercises in the first chapter of Structure and Interpretation of Computer Programs (and working on a couple of parsers and compilers) cemented this knowledge for me. Fortunately, there's a shortcut: just remember that your computer prefers to do one thing at a time. Not everything can happen at once. There's a sequence to which operations happen.

    Once you get that, you can reason your way to the need for associativity and precedence.

Re^3: Logical Not and arguments to grep
by Marshall (Canon) on Apr 02, 2012 at 01:02 UTC
    I also prefer to use the block form of map and grep.

    The comma operator is useful in other ways..see the command loop I coded at Re: Storing 10 numbers in array. In the statement,

    while ( (print "$prompt: "), $number = <STDIN> ) {...}
    The comma operator allows this to be a single statement.
    You can't put two statements like:
    print "$prompt"; $number = <STDIN>;
    into the while() conditional. But this statement which uses the comma operator is ok. The "truth or falseness" of the statement is decided by the last clause (the input of the data - not the return value of the print which will be a "1"). Note the paren's are required.

    By doing it this way, a re-prompt happens automatically at every loop iteration without having to code the prompting statement within the loop (and having a standalone initial prompting statement before the loop to get things started).