$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/
如果分配的结果只是value复制自$y
to $x
那么tr///
会导致无法修改常量项或等效项,并且它不会影响存储在任一变量中的内容
这是变量$a
,执行如下
执行第一个增量,返回$a
$a
现在是 11
执行第二个增量,返回$a
again
$a
现在是 12
执行第一个加法,将两个增量返回的值相加 - 两者$a
$a
是 12,所以$a + $a
is 24
执行第三个增量,返回$a
again
$a
现在是 13
执行第二次加法,它将第一次加法返回的值 (24) 和第三个增量 ($a
)
$a
是 13,所以24 + $a
is 37
请注意,不应依赖于此。它没有在任何地方记录,除了说它是未定义的,并且行为可能会随着 Perl 的任何版本而改变
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)