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'?

>> A xor B := ( A and not B) or ( B and not A)

I only want to leave here an example: although 'logically' they return the same 'Perl-truthness', in this case they won't return same value:
perl -wle 'my( $A, $B ); print for map "[$_]", ( $A xor $B ), ( $A and + not $B or $B and not $A ); '
output ('' vs. undefined):
Use of uninitialized value $_ in concatenation (.) or string at -e lin +e 1. [] []

Replies are listed 'Best First'.
Re^7: 'xor' operator is not a sibling to 'or' and 'and'?
by LanX (Saint) on Dec 28, 2019 at 17:06 UTC
    yep
    perl -MData::Dump=pp @values=("true",undef); for $A (@values) { for $B (@values) { pp [$A,$B], [ ($A xor $B), ( ($A && !$B) || ($B && !$A) ) ]; } } __END__ (["true", "true"], ["", ""]) (["true", undef], [1, 1]) ([undef, "true"], [1, 1]) ([undef, undef], ["", undef])

    but if you apply De Morgan's law, you'll always get "default" Booleans:

    perl -MData::Dump=pp @values=("true",undef); for $A (@values) { for $B (@values) { pp [$A,$B], [ ($A xor $B), !( ( !$A || $B) && (!$B || $A) ) ]; } } __END__ (["true", "true"], ["", ""]) (["true", undef], [1, 1]) ([undef, "true"], [1, 1]) ([undef, undef], ["", ""])

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