#!/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
有什么问题吗? - ThisSuitIsBlackNot$aref->[1]
等。老式的方式是${$aref}[1]
(不好),或者$$aref[1]
(更糟糕)。另外要注意的是,在命令行或shebang行中使用-w
相比于use warnings
来说存在一些劣势。 - Borodin