【发布时间】:2015-08-07 23:26:49
【问题描述】:
#!/usr/bin/perl -w
use strict;
my $aref = [1, 2, 3];
my @a = @$aref; # this line
$a[1] = 99;
print "aref = @$aref\n";
print "a = @a\n";
产生输出:
aref = 1 2 3
a = 1 99 3
输出显示@a 和@$aref 没有引用同一个数组。
标记线是我的问题所在。标量$aref 的值是对匿名数组的引用。在标记的行中,我希望能够使数组变量@a 引用该数组,但是会发生匿名数组被复制而@a 引用匿名数组的副本。赋值和打印语句显示了这一点。
我知道,当您分配给数组时,分配的右侧是列表上下文,因此 @$aref 被强制转换为其元素列表。有没有办法将名称@a 赋予$aref 引用的数组?
【问题讨论】:
-
只使用
@$aref有什么问题? -
您可以将
@a作为参考,my $a = $aref -
@NormanofAnstruther 这就是我留下评论而不是答案的原因。如果你解释为什么你想要做某事而不是仅仅解释你想怎么做,你通常会得到更好的答案。
-
它没有;他建议你不要使用@a。尽管答案中给出了别名建议,但这确实是您的最佳选择。
-
@NormanofAnstruther:请记住,您通常不想引用整个数组。单个元素可以称为
$aref->[1]等。老式的方式是${$aref}[1](坏)或$$aref[1](更糟)。另请注意,use warnings在各方面都优于命令行或 shebang 行上的-w