Perl:$\和$array[$\问题

Perl:$\和$array[$\问题,perl,Perl,下面是我的代码,请查看 use strict; my @people = qw{a b c d e f}; foreach (@people){ print $_,"$people[$_]\n"; } 下面是输出 [~/perl]$ perl test.pl aa #why the output of $people[$_] is not same with $_? ba ca da ea fa 谢谢您的提问。$\u是您正在查看的实际元素$people[$\u

下面是我的代码,请查看

use strict;
my @people = qw{a b c d e f};
foreach (@people){
    print $_,"$people[$_]\n";
}
下面是输出

[~/perl]$ perl test.pl
aa             #why the output of $people[$_] is not same with $_?
ba
ca
da
ea
fa

谢谢您的提问。

$\u
是您正在查看的实际元素
$people[$\u]
正在从
@people
中获取
$\ucode>第th个元素。它旨在与数字索引一起使用,因此它简化了其参数。把一个字母“转换”成一个数字只会转换成零,因为它不能从中解析出一个数字。因此,
$people[$\u]
只是
$people[0]
,而
$\u
不是一个数字。如果你尝试同样的实验,其中一些列表元素实际上是数字的,你会得到一些更有趣的结果

尝试:

输出:

aa
ba
ca
33
2c
1b
因为在前三种情况下,我们无法将
a
b
c
解析为数字,所以我们得到了第0个元素。然后,我们可以将
3
2
1
转换为数字,得到元素3、2和1


编辑:正如@ikegami在一篇评论中提到的那样,除了
使用严格的
之外,在您的文件顶部放置
使用警告
,以获得关于这类事情的警告。

$\ucode>是您正在查看的实际元素
$people[$\u]
正在从
@people
中获取
$\ucode>第th个元素。它旨在与数字索引一起使用,因此它简化了其参数。把一个字母“转换”成一个数字只会转换成零,因为它不能从中解析出一个数字。因此,
$people[$\u]
只是
$people[0]
,而
$\u
不是一个数字。如果你尝试同样的实验,其中一些列表元素实际上是数字的,你会得到一些更有趣的结果

尝试:

输出:

aa
ba
ca
33
2c
1b
因为在前三种情况下,我们无法将
a
b
c
解析为数字,所以我们得到了第0个元素。然后,我们可以将
3
2
1
转换为数字,得到元素3、2和1


编辑:正如@ikegami在评论中提到的那样,除了
使用严格的
之外,在文件的顶部放置
使用警告
,以获得关于此类事情的警告。

始终使用
使用严格的;使用警告qw(全部)@ikegami,为什么不干脆
使用警告?打字比较短。总是使用
使用strict;使用警告qw(全部)@ikegami,为什么不干脆
使用警告?打字比较短。