哈希中是否有隐藏的空白元素?

时间:2013-03-20 21:08:44

标签: perl

使用Hash我遇到了以下输出,不知道为什么会这样。默认情况下是否在哈希中嵌入了空格?

#! /usr/bin/perl
# playwhash
use warnings;
use strict;

my %normal = ("Tom ","5'3","Peter ","5'11","John " ,"5'7",);
foreach (1..6) {
    print each %normal, "\n";
    }

输出看起来像

Peter 5'11
Tom 5'3
John 5'7

Peter 5'11
Tom 5'3

2 个答案:

答案 0 :(得分:7)

来自docs on each function

  

在每个都返回散列或数组中的所有条目之后,对每个条目的下一次调用将返回列表上下文中的空列表和标量上下文中的undef;下一次调用后,重新开始迭代。

因此,在第三次迭代后each只返回一个空列表,以显示哈希中没有更多元素。 Next从头开始调用返回哈希条目。

答案 1 :(得分:2)

each返回键和值,因此迭代次数不是6(这是键+值的总和)。这是each

的常见用法
while( ($key, $value) = each %normal ) {
   print "$key  =>  $value\n";
}

或仅用于打印perl结构:

use Data::Dump;
my %normal = ("Tom ","5'3","Peter ","5'11","John " ,"5'7",);
dd %normal;