Perl Bug 8 - xor invalid bug


perl version: 5.005_03, 5.6.0

This is not a bug! I mistakenly assumed xor precedence was higher than '=' and was wrong!

perl 'xor' is wonky:

% cat p
#!/usr/bin/perl

for (0..3) {
  my ($a,$b) = (($_&1),($_&2)>>1);
  my $c = ($a xor $b);
  print "($a xor $b) is $c\n";
}

for (0..3) {
  my ($a,$b) = (($_&1),($_&2)>>1);
  my $c = $a xor $b;
  print "$a xor $b is $c\n";
}

% p
(0 xor 0) is
(1 xor 0) is 1
(0 xor 1) is 1
(1 xor 1) is
0 xor 0 is 0
1 xor 0 is 1
0 xor 1 is 0
1 xor 1 is 1

The "($a xor $b)" works by returning 1:""
The "$a xor $b" seems completely wonky, it just returns $a:

% perl -e 'print 42 xor 9;'
42

Ah! It seems to be treating it like the short circuit or:

% perl -e 'print (1 xor 0),"...blah blah\n";'
1
% perl -e 'print (0 xor 0),"...blah blah\n";'


And even:

% perl -e 'print "hi: ",(0 xor 3)," ...blah blah\n";'
hi: 1 ...blah blah
% perl -e 'print "hi: ",(1 xor 3)," ...blah blah\n";'
hi:  ...blah blah

However:

% man perlop
       ...
       Binary "xor" returns the exclusive-OR of the two surrounding
       expressions.  It cannot short circuit, of course.
       ...