使用^=运算符时,程序永远不会终止,也不会产生结果.难道我做错了什么?
为了检查我是否可以重现这个,我使用了这个可工作的,可验证的例子:
my $k = 1;
$k ^= 24;
say $k;
Run Code Online (Sandbox Code Playgroud)
除此之外,我甚至尝试过:$k = $k ^ 24;- 但这仍然会产生同样的问题.
其中有几个中缀运算符^,所有这些运算符都表示独占或以某种形式.
^正义xor,如果只有一个值是真实的话,这是真实的.这是一个可以传递的价值.
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
Run Code Online (Sandbox Code Playgroud)
我添加so了崩溃交叉点,你应该尽快做到这一点.
^^短路xor.返回唯一的值.如果没有任何值,则返回最后一个值.如果存在多个真值,则会短路并返回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
Run Code Online (Sandbox Code Playgroud)+^Int按位xor.它比较了两个Ints的位,它返回的值有一个1Ints中只有一个I 1在该位置
say (0b10101010 +^ 0b10100000).base: 2; # 1010
say 1.5 +^ 2; # 3
Run Code Online (Sandbox Code Playgroud)~^字符串按位xor.与+^字符串上的除外相同.
say 'aa' ~^ 'US'; # 42
Run Code Online (Sandbox Code Playgroud)Perl 5用于^两者+^并~^取决于它给出的值.如果您选择使用它们,则较新版本具有单独的运算符.
您的代码没有停止的原因是创建的Junction ^跟踪值的来源.
my $k = 1;
my $v = $k ^ 24;
say $v; # one(1, 24);
$k = 2;
say $v; # one(2, 24);
Run Code Online (Sandbox Code Playgroud)
那么就$k ^= 24创造了一种自我指涉的价值.这很好,直到你尝试使用或打印它.