看一下这段代码:
my @arr = (1, 2);
my $ref = \@arr;
my @s = @$ref;
push @s, 4;
print join(", ", @arr) . "\n";
出乎意料的是,输出为“1,2”。发生了什么?为什么我有两个不同的数组(@s是(1,2,4))?
当然,如果我在输出之前写的话,我会得到“1,2,4”,如下所示:
$ref = \@s;
@arr = @$ref;
但这看起来很笨拙。
我习惯了其他OOP语言,其中不会发生这样的事情 - 无论其引用如何,我都可以修改一个对象。
所以有人可以帮助我吗?
答案 0 :(得分:2)
my @s = @$ref;
生成引用数组的副本。之后,@s
和@arr
是不相关的数组,恰好具有相同的内容(暂时)。
如果要修改引用的数组,则必须直接使用它,例如:
push @$ref, 4;
还有Data::Alias模块,(我认为)可以让你做你想要的。但那里有很深的魔法,我自己从未使用过它。