Maintainer: Adriano Ferreira <ferreira@cpan.org> Date: 29 Sep 2007 Last Modified: 12 Dec 2007 Number: 7 Version: 5
Status: Published
In the article on coercion operators, we
got to know the prefix operator '?' which converts
values into Bool::True or Bool::False. Like it
happens with '~' for strings, '?' is recurrent
for boolean operators.
In Perl 6, the usual infix boolean operators are:
?& - and ?| - or ?^ - xor
These operators evaluate their operands in boolean context and apply simple Boole's algebra on them.
False ?& False # False
'' ?& 'yes' # False
1 ?& False # False
42 ?& 42 # True
"" ?| 0 # False
False ?| True # True
[1] ?| 0 # True
True ?| True # True
'' ?^ '' # False
undef ?^ {a=>1} # True
{:k} ?^ undef # True
True ?^ True # False
Each of the three operators always evaluate both sides and
return one of the standard values Bool::True or
Bool::False. So these boolean AND and OR do not short-circuit
as their logical counterparts: '&&' and '||'.
Precedence is different too.
Equivalent to precedence
$a ?& $b ?$a * ?$b != 0 multiplicative
$a ?| $b ?$a + ?$b != 0 additive
$a ?^ $b ?$a + ?$b == 1 additive
The boolean negation operator may be written '?^' or '!'.
?^ $a Equivalent to True ?^ $a
Conceptually '?^' coerces to boolean first and
then flips the bit. Synopsis 3 recommends the use
of '!' instead.
$Revision: 84 $