Perl:$ _和$ array [$ _]问题

时间:2018-02-16 03:29:33

标签: 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

谢谢你的提问。

1 个答案:

答案 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

由于在前三种情况下,我们无法将abc解析为数字,因此我们得到了第0个元素。然后,我们实际上可以将321转换为数字,因此我们得到元素3,然后是1。

编辑如@ikegami的评论中所述,除了use warnings之外,将use strict放在文件的顶部以获得有关此类事件的警告。