perl - perl 表达式 $a = $a++ 中是否有任何副作用?

标签 perl auto-increment

有人请解释下:

在“Programming Perl”一书中,后缀自增运算符被描述为

when placed after, they ($a-- , $a++) increment or decrement the variable after returning the value.



所以,据我所知,$a++从来没有在 void 上下文中使用,因为有人说过

they increment or decrement the variable



但在下一个示例中,变量的值永远不会改变:
my $a = 3;
$a = $a++;
say $a; #always outputs 3

所以我的假设是当值分配给同一个变量时没有理由使用后自动增量,但是“Programming Perl”中的定义应该被认为是错误的,因为操作符不影响变量,而是变量中的值(至少在那个例子中)。那正确吗?

提前欣赏。

最佳答案

为什么,后缀自动递增和自动递减运算符实际上经常在 void 上下文中使用,正是因为它们影响变量 - 而不是值。

您的示例的工作方式是这样的,因为变量在其旧值被分配给它之前会被后递增。换句话说,顺序

my $a = 3; $a = $a++; 

...是...
1) $old_value = $a;
2) $a = $a + 1;
3) $a = $old_value;

您是否应该更换 $a = $a++$b = $a++在您的示例中,然后打印 $b 和 $a 的值,您会清楚地看到差异:而 $a变得递增(因此,等于 4),$b被分配了旧值 $a (3).

关于perl - perl 表达式 $a = $a++ 中是否有任何副作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11530490/

相关文章:

mysql - 重置 SQLite3/MySQL 中的行数计数

Perl:数组中的 undef 元素

perl - 我如何在 Perl 中模拟 Web 服务器?

Perl 脚本来计算字/行

perl - 有人可以解释递归代码的逻辑以及什么时候最好使用吗?

mysql - mysql auto increment如何知道删除行后从哪个id继续?

perl - 如何将 Perl 模块设置为 "use"位于不在 @INC 的目录中?

MySQL 为什么在插入时我的自动递增不是从 1 开始?

mysql - 避免插入失败以避免虚假的自动增量

mysql - 为什么 MySQL 自动增量会在插入失败时增加?