当我尝试将reptition赋值运算符与数组一起使用时,为什么会出现错误?

Cha*_*ens 7 perl

#!/usr/bin/perl

use strict;
use warnings;

my @a = qw/a b c/;
(@a) x= 3;
print join(", ", @a), "\n";
Run Code Online (Sandbox Code Playgroud)

我希望上面的代码可以打印"a, b, c, a, b, c, a, b, c\n",但它会消失:

Can't modify private array in repeat (x) at z.pl line 7, near "3;"
Run Code Online (Sandbox Code Playgroud)

这看起来很奇怪,因为它X <op>= Y被记录为等同于X = X <op> Y,并且以下代码按照我的预期工作:

#!/usr/bin/perl

use strict;
use warnings;

my @a = qw/a b c/;
(@a) = (@a) x 3;
print join(", ", @a), "\n";
Run Code Online (Sandbox Code Playgroud)

这是Perl中的错误还是我误解了这里应该发生什么?

JSB*_*ոգչ 0

问题是你试图就地修改@a,Perl 显然不允许你这样做。您的第二个示例正在做一些略有不同的事情,即创建一个由重复三次的 @a 组成的新数组,然后用该值覆盖 @a 。

可以说,第一种形式应该透明地转换为第二种形式,但这并不是实际发生的情况。您可以认为这是一个错误...将其归档到适当的位置,看看会发生什么。