Perl增量运算符

$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的任何版本而改变

相关文章

忍不住在 PerlChina 邮件列表中盘点了一下 Perl 里的 Web 应用框架(巧的是 PerlBuzz 最近也有一篇相关...
bless有两个参数:对象的引用、类的名称。 类的名称是一个字符串,代表了类的类型信息,这是理解bless的...
gb2312转Utf的方法: use Encode; my $str = "中文"; $str_cnsoftware = encode("utf-8...
  perl 计算硬盘利用率, 以%来查看硬盘资源是否存在IO消耗cpu资源情况; 部份代码参考了iostat源码;...
1 简单变量 Perl 的 Hello World 是怎么写的呢?请看下面的程序: #!/usr/bin/perl print "Hello W...
本文介绍Perl的Perl的简单语法,包括基本输入输出、分支循环控制结构、函数、常用系统调用和文件操作,...