1

ハッシュで遊んで、私は次の出力に出くわしました、これがなぜであるかわかりません。デフォルトでハッシュに埋め込まれた空白はありますか?

#! /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 が返されます。その次の呼び出しで反復が再開されます。

そのため、3 回目の反復の後each、空のリストを返すだけで、ハッシュに要素がなくなったことを示します。次の呼び出しは、最初からハッシュ エントリを返します。

于 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 に答える