4

我有以下代码:

my @array = ('a', 'b', 'c');

my $region = \@array;  # Returns an array reference
my $Value = ${@{$region}}[3];   

我正在使用严格;

这段代码在 Perl v5.8.6 中顺利通过,现在我安装了 v5.10.1,出现运行时错误:

不能使用字符串(“4”)作为数组引用,而“严格引用”在...中使用

我将代码更改为以下内容,从而解决了问题:

my @array = ('a', 'b', 'c');

my $region = \@Array;
my @List = @{$region};
my $Value = $List[3];   

我的问题是,以前的方式有什么问题?这两个版本之间有什么变化?我在这里想念什么?

谢谢,盖尔

4

2 回答 2

11

${@{$region}}[3]从来都不是访问 arrayref 的正确方法。我不太确定它是什么意思,我认为 Perl 也不是(因此不同版本的 Perl 中的行为不同)。

perlref中解释了正确的方法:

my $Value = ${$region}[3]; # This works with any expression returning an arrayref
my $Value = $$region[3];   # Since $region is a simple scalar variable,
                           # the braces are optional
my $Value = $region->[3];  # This is the way I would do it
于 2011-08-14T11:43:44.937 回答
2

我会这样做:

my @array = ('a', 'b', 'c');
my $region = \@array;
my $Value = $$region[1];
print $Value;

输出:

b
于 2011-08-14T10:51:36.787 回答