Perl - 数组引用,使用严格

Gal*_*man 4 arrays perl reference strict

我有以下代码:

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

my $region = \@array;  # Returns an array reference
my $Value = ${@{$region}}[3];   
Run Code Online (Sandbox Code Playgroud)

我使用严格;

这段代码在Perl v5.8.6中顺利传递,现在我安装了v5.10.1,我收到运行时错误:

不能使用字符串("4")作为ARRAY参考,而在"严格参考"使用时...

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

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

my $region = \@Array;
my @List = @{$region};
my $Value = $List[3];   
Run Code Online (Sandbox Code Playgroud)

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

谢谢,加尔

cjm*_*cjm 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
Run Code Online (Sandbox Code Playgroud)

  • 新的行为是正确的; `$`之后的块应该得到标量上下文.较旧的perl版本会错误地将数组提升为数组引用.但我认为这是通过一个弃用周期 - 看起来像是为'@array - > []`而不是`$ {@ array} []`:( (2认同)