循环遍历Perl中的列表

时间:2011-11-06 10:17:24

标签: list perl loops for-loop iteration

我开始学习Perl,这只是一个基本的小循环,我得到一个奇怪的输出,并希望对此有一些清晰。

@numbers = {1,4,5,6,7,8,9};
for(my$i = 0; $i<=$#numbers; $i++)
{
    print ("$numbers[$i}\n");
}

输出为HASH(0x23a09c)。

这实际意味着什么,为什么我会得到这个结果。

问候 阿里安

3 个答案:

答案 0 :(得分:16)

你想要这个:

@numbers = (1,4,5,6,7,8,9);
foreach my $number (@numbers)
{
    print ("$number\n");
}

使用{1,4,5,6,7,8,9},您实际上是在创建对包含键值对(1 => 4, 5 => 6, 7 => 8, 9 => undef)的匿名哈希的引用。当您编写@numbers = {1,4,5,6,7,8,9};时,该引用将成为存储在@numbers数组中的唯一标量。

此外,如果您只想迭代元素,则无需使用带有计数器的“经典”样式。

你可以这样做:

for my $number (1 .. 9) {
    print "$number\n";
}

确保在您编写的每个Perl脚本的开头都有use strict;use warnings;。这些指令使perl能够捕获错误并警告某些可能错误的代码。作为初学者,您可能希望将warningsdiagnostics相关联,以获取更详细的信息。

这些非常方便,特别是在开始使用Perl时,因为它们可以帮助您防止自己在脚下射击。

答案 1 :(得分:5)

你正在做的是在索引0创建一个带散列引用的数组,即:

$numbers[0] = {
    1 => 4,
    5 => 6,
    7 => 8,
    9 => undef,
};

如果您使用过严格,您会看到:

Global symbol "@numbers" requires explicit package name

警告会告诉你:

Odd number of elements in anonymous hash

使用以下内容启动所有perl脚本:

#!/usr/bin/perl -w
use strict;

(或use warnings;),您将始终能够立即捕捉到这些类型的错误。即使是经验丰富的Perl程序员也会不时制作它们。真的没有任何理由让他们离开(除非你打高尔夫球)。

答案 2 :(得分:1)

尝试:

@numbers = (1,4,5,6,7,8,9);
foreach(@numbers) {
    print $_;
}