我开始学习Perl,这只是一个基本的小循环,为此我得到一个奇怪的输出,并希望对此有所澄清。在Perl中循环遍历一个列表
@numbers = {1,4,5,6,7,8,9};
for(my$i = 0; $i<=$#numbers; $i++)
{
print ("$numbers[$i}\n");
}
输出是HASH(0x23a09c)。
这实际上意味着什么,为什么我会得到这个结果。
问候 阿里安
我开始学习Perl,这只是一个基本的小循环,为此我得到一个奇怪的输出,并希望对此有所澄清。在Perl中循环遍历一个列表
@numbers = {1,4,5,6,7,8,9};
for(my$i = 0; $i<=$#numbers; $i++)
{
print ("$numbers[$i}\n");
}
输出是HASH(0x23a09c)。
这实际上意味着什么,为什么我会得到这个结果。
问候 阿里安
你想这样的:
@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";
}
请确保您有use strict;
和use warnings;
在你写的每一个Perl脚本的开始。这些指令使perl
能够捕获错误并警告某些可能的错误代码。作为一个初学者,你可能想要与warnings
和diagnostics结合,以获得更详细的信息。
这些都非常方便,尤其是在开始使用Perl时,它们可以帮助您防止在脚下自我拍摄。
尝试:
@numbers = (1,4,5,6,7,8,9);
foreach(@numbers) {
print $_;
}
你有没有试过用原始海报的代码?为什么不?问题不在于循环语句,而在于变量的类型。 – Jens
有两个问题。一个在循环中,一个在声明中。我的回答集中在循环和更短的替代方案。感谢评论,但我编辑了我的帖子! – interphase27
'print $ _'是多余的。 – TLP
你在做什么有索引0创建一个哈希REF的阵列,即:
$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程序员也会时不时地做出来。真的没有任何理由让他们离开(除非你打高尔夫球)。
+1 *当电脑可以告诉你*时,不要问百万人。 '严格使用;使用警告;' –
看起来像某人可能已经阅读http://stackoverflow.com/q/8023959/725418毕竟。 =) – TLP
你的例子有一个语法错误。确保你发布了你实际使用的内容。 – Mat
我会,对不起...谢谢 – Arianule