1

玩 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
4

2 回答 2

7

每个函数的文档中

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

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

于 2013-03-20T21:12:03.217 回答
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;
于 2013-03-20T21:19:37.310 回答