Perl - 在foreach-loop中尝试访问数组中的两位数字时出错

Eir*_*rii 0 perl foreach

我刚开始学习Perl并偶然发现了一个错误,我无法通过谷歌搜索或阅读我正在学习的书来解决这个错误.

我的代码看起来像这样:

use strict;
use warnings;

my @array = (1, 2, 10);

foreach my $i (@array) {
    print $array[$i-1];
}
Run Code Online (Sandbox Code Playgroud)

如果我的数组只包含一位数字,那么这种方法很有效.一旦foreach循环达到一个两位数的数字(在这种情况下为10),我会收到一条警告,说"在...中使用未初始化的值",循环停止.如果我尝试对数字做任何事情(添加等)也会发生同样的情况,它适用于单个数字,但会以两位数停止.

我现在无法理解这里发生的事情 - 我猜它与Perl存储数组元素的方式有关,但我找不到任何东西,也不知道要搜索什么.

谁能指出我正确的方向?

Sch*_*ern 5

我不确定你要做什么,但这不符合你的想法.

my @array = (1, 2, 10);
foreach my $i (@array) {
    print $array[$i-1];
}
Run Code Online (Sandbox Code Playgroud)

$i不是像0,1,2,3的索引...取而代之$i是的每个元素@array:1,2,10,所以,$array[$i-1]就是$array[0],$array[1],$array[9].@array没有第九个元素.

如果你想通过每个循环指标@array,循环是这样的:

for my $idx (0..$#array) {
    # 0, 1, 2
    print "$idx\n";
}
Run Code Online (Sandbox Code Playgroud)

如果您通过每个要循环元素@array,像这样的循环:

for my $element (@array) {
    # 1, 2, 10
    print "$element\n";
}
Run Code Online (Sandbox Code Playgroud)