我开始学习Perl,这只是一个基本的小循环,我得到一个奇怪的输出,并希望对此有一些清晰。
@numbers = {1,4,5,6,7,8,9};
for(my$i = 0; $i<=$#numbers; $i++)
{
print ("$numbers[$i}\n");
}
输出为HASH(0x23a09c)。
这实际意味着什么,为什么我会得到这个结果。
问候 阿里安
答案 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
能够捕获错误并警告某些可能错误的代码。作为初学者,您可能希望将warnings
与diagnostics相关联,以获取更详细的信息。
这些非常方便,特别是在开始使用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 $_;
}