以下是我的代码,请查看。
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
谢谢你的提问。
答案 0 :(得分:8)
$_
是您正在查看的实际元素。 $people[$_]
正在从$_
中获取@people
个元素。它旨在与数字索引一起使用,因此它将其参数编号。接受一个字母并将其“转换”为数字只会转换为零,因为它无法解析数字。因此,当$people[$_]
不是数字时,$people[0]
只是$_
。如果你尝试相同的实验,其中一些列表元素实际上是数字的,你会得到一些更有趣的结果。
尝试:
use strict;
my @people = qw{a b c 3 2 1};
foreach (@people){
print $_,"$people[$_]\n";
}
输出:
aa
ba
ca
33
2c
1b
由于在前三种情况下,我们无法将a
,b
或c
解析为数字,因此我们得到了第0个元素。然后,我们实际上可以将3
,2
和1
转换为数字,因此我们得到元素3,然后是1。
编辑如@ikegami的评论中所述,除了use warnings
之外,将use strict
放在文件的顶部以获得有关此类事件的警告。