Beefy Boxes and Bandwidth Generously Provided by pair Networks
XP is just a number
 
PerlMonks  

Re^6: 'xor' operator is not a sibling to 'or' and 'and'?

by rsFalse (Chaplain)
on Dec 18, 2019 at 21:35 UTC ( [id://11110358]=note: print w/replies, xml ) Need Help??


in reply to Re^5: 'xor' operator is not a sibling to 'or' and 'and'?
in thread 'xor' operator is not a sibling to 'or' and 'and'?

Hm, paragraphs about '||,//,&&' and about 'and/or/xor' are distant in docs, because their precedence differs. But also sentences about return values of 'and' and 'or' seems to be incorrect. I think that section needs to be slightly rewritten, with emphasis that 'and' and 'or' do not return logical result, but return evaluated expressions.

Replies are listed 'Best First'.
Re^7: 'xor' operator is not a sibling to 'or' and 'and'?
by pryrt (Abbot) on Dec 18, 2019 at 22:57 UTC

    Stop thinking in terms of bitwise; this is Boolean. The "evaluated expressions" are logical values. 2 is logic-true, 3 is logic-true, 2 and 3 returns 3, which is logic-true. It uses the last evaluated expression as the logical value.

    C:\usr\local\share\PassThru\perl>perl -le "print +('george' and 'graci +e')" gracie C:\usr\local\share\PassThru\perl>perl -le "print +('0' and 'gracie')" 0 C:\usr\local\share\PassThru\perl>perl -le "print +('' and 'gracie')" C:\usr\local\share\PassThru\perl>perl -le "print +('george' and 'false +')" false C:\usr\local\share\PassThru\perl>perl -le "print +('george' and '')" C:\usr\local\share\PassThru\perl>perl -le "print +(2 and 4)" 4 C:\usr\local\share\PassThru\perl>perl -le "print +(2 && 4)" 4 C:\usr\local\share\PassThru\perl>perl -le "print +(2 & 4)" 0
      >> Stop thinking in terms of bitwise; this is Boolean.

      If this is Boolean, shouldn't it return 1 or ''/0?
      p.s. I haven't write anything about bitwise.
        If this is Boolean, shouldn't it return 1 or ''/0?

        Technically, TRUE and FALSE. 1 and 0 are just one way of representing those concepts. The TI99-4/A TI-BASIC used -1 to represent TRUE. Perl uses just about anything for TRUE, and a more limited set (including 0, '', and undef) for FALSE; as a result, Perl just picked the most convenient TRUE or FALSE for implementing with the short-circuiting of and / or, which turned out to be the last expression evaluated -- because with short-circuiting, the last expression evaluated always has the same logical value as the entire and / or. With xor, neither the last-evaluated nor the first-evaluated expression contains the correct logical value, so Perl has to do extra work to come to the right logical conclusion, so then Perl uses its default TRUE and FALSE representations, rather than just picking the value from one of the evaluated expressions.

        p.s. I haven't write anything about bitwise.

        Sorry, you're right. I was going on very little sleep yesterday, and had misinterpreted your original post in a way that made me conclude you were expecting results similar to a bitwise operation; re-reading after a better night's sleep, I don't see that anymore.

Re^7: 'xor' operator is not a sibling to 'or' and 'and'?
by LanX (Saint) on Dec 21, 2019 at 19:31 UTC
    > I think that section needs to be slightly rewritten

    I agree that && and || should be extended with the notion: "returns last evaluated side".

    Probably with an analogous if statement.

    A || B := do { if (A) {A} else {B} }

    I disagree that they "do not return logical result" , because the truth table is fully respected.

    I don't think the docs to and/or need to be extend, because their low precedence and use for flow control makes the use of return values unlikely without brackets. Mentioning the similarity to && and || should be sufficient.

    Cheers Rolf
    (addicted to the Perl Programming Language :)
    Wikisyntax for the Monastery FootballPerl is like chess, only without the dice

Log In?
Username:
Password:

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

How do I use this?Last hourOther CB clients
Other Users?
Others contemplating the Monastery: (5)
As of 2024-03-28 08:20 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found