有几个中缀运算符
^
在它们中,所有这些都意味着排他性或某种形式的排他性。
-
^
连接xor,如果只有一个值是trueish,则为trueish。它是一个可以传递的值。
so 1 == 1 ^ 2; # True
so 2 == 1 ^ 2; # True
so 42 == 1 ^ 2; # False
so 1 ^ 2 == 1 ^ 2; # False
my $v = 1 ^ 2;
so 1 == $v; # True
我补充说
so
要把交叉口弄垮,你应该尽快这样做。
-
^^
短路异或。返回唯一的truish值。如果没有trush值,则返回最后一个值。如果有多个trueish值,它会短路并返回
Nil
say ( 0 ^^ 42 ^^ Nil );
42
say ( !say(1) ^^ !say(2) ^^ -1 but False );
1
2
-1
say ( say(1) ^^ say(2) ^^ say(3) );
1
2
Nil
-
+^
整数位异或。它比较两个int的位,返回的值有
1
如果其中一个整数有
1个
在那个位置
say (0b10101010 +^ 0b10100000).base: 2; # 1010
say 1.5 +^ 2; # 3
-
~^
字符串按位异或。一样做
+^
除了在弦上。
say 'aa' ~^ 'US'; # 42
使用Perl 5
^
对于两者
+^
和
~^
取决于给定的值。如果您选择使用较新的版本,它们有单独的运算符。
代码没有停止的原因是
^
跟踪价值的来源。
my $k = 1;
my $v = $k ^ 24;
say $v; # one(1, 24);
$k = 2;
say $v; # one(2, 24);
那么
$k ^= 24
创建自引用值。这是好的,直到你尝试使用,或打印它。