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]) #### 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], ["", ""])