$a = 10; $b = (++$a) + (++$a) + (++$a); print $b;
我得到答案37.
任何人都可以解释这个操作如何进行,结果如何得到37.
按照我的逻辑,应该是36:
(++$a) + (++$a) + (++$a) 11 + 12 + 13 = 36
但是我得到了答案37
解决方法
Perl正在执行此操作
( ( $a = $a + 1 ) + ( $a = $a + 1 ) ) + ( $a = $a + 1 )
你甚至将$a放在括号中,以便说在应用前必须首先发布它们,尽管它们的优先级还是比较高的
这主要围绕赋值运算符=返回其第一个操作数,这允许操作像这样的事实
(my $x = $y) =~ tr/A-Z/a-z/
如果赋值的结果是从$y复制到$x的值,那么tr ///将导致不能修改常量项或等价项,并且它对存储在任一变量中的内容都没有影响
这里是变量$a,执行如下
>执行第一个增量,返回$a
$a现在是11
>执行第二个增量,再次返回$a
$a现在是12
>执行第一个加法,其中增加了两个增量返回的值,这两个增量都是$a
$a是12,所以$a $a是24
>执行第三个增量,再次返回$a
$a现在是13
>执行第二个加法,它添加了第一个加法(24)和第三个增量($a)返回的内容,
$a是13,所以24 $a是37
请注意,这不应该依赖.除了说我们未定义之外,它没有记录在任何地方,并且行为可能随着Perl的任何版本而改变