循环遍历Perl中的列表

Ari*_*ule 5 iteration perl loops for-loop list

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

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

输出是HASH(0x23a09c).

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

关于阿里安

pca*_*cao 17

你要这个:

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

随着{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";
}
Run Code Online (Sandbox Code Playgroud)

请确保您有use strict;use warnings;你写的每一个Perl脚本的开始.这些指令可以perl捕获错误并警告某些可能错误的代码.作为初学者,您可能希望将这些warnings诊断相结合以获取更详细的信息.

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


fle*_*esk 5

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

$numbers[0] = {
    1 => 4,
    5 => 6,
    7 => 8,
    9 => undef,
};
Run Code Online (Sandbox Code Playgroud)

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

Global symbol "@numbers" requires explicit package name
Run Code Online (Sandbox Code Playgroud)

并且警告会告诉你:

Odd number of elements in anonymous hash
Run Code Online (Sandbox Code Playgroud)

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

#!/usr/bin/perl -w
use strict;
Run Code Online (Sandbox Code Playgroud)

(或者use warnings;)你将永远能够立即发现这些错误.即使是经验丰富的Perl程序员也会不时制作它们.真的没有任何理由让他们离开(除非你打高尔夫球).

  • +1*当电脑告诉你时,不要问一百万人*.`使用严格; 使用警告;` (2认同)