arrays - Perl - 数组引用,使用严格

标签 arrays perl reference strict

我有以下代码:

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

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

我正在使用严格;

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

Can't use string ("4") as an ARRAY ref while "strict refs" in use at ...



我将代码更改为以下内容,从而解决了问题:
my @array = ('a', 'b', 'c');

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

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

谢谢,
加尔

最佳答案

${@{$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

关于arrays - Perl - 数组引用,使用严格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7056318/

相关文章:

perl - 为什么我不能使用 LWP::Simple 获取维基百科页面?

regex - 计数grep匹配的数量?

c# - TeamCity 在构建项目时包含 dll 作为引用

arrays - 原始声音 byteArray 到 float Array

JavaScript:如何从数组中删除特定元素

java - 哪种数据结构适合存储三个相关值?以及如何实现?

regex - Sed、awk 或 perl 捕获 2 种模式之间的线条

javascript - 构造 JavaScript 数组原型(prototype)方法

java - 在访问作为引用的类成员时,lambda 表达式是否持有对其封闭实例的引用?

.net - 引用和命名空间如何工作?