私は、Perlでハッシュについて学ぶことを試みる単純なスクリプトを持っています。なぜ、Perlのeach()が2回目のハッシュ全体を繰り返し処理しないのですか?
#!/usr/bin/perl
my %set = (
-a => 'aaa',
-b => 'bbb',
-c => 'ccc',
-d => 'ddd',
-e => 'eee',
-f => 'fff',
-g => 'ggg'
);
print "Iterate up to ggg...\n";
while (my ($key, $val) = each %set) {
print "$key -> $val \n";
last if ($val eq 'ggg');
}
print "\n";
print "Iterate All...\n";
while (my ($key, $val) = each %set) {
print "$key -> $val \n";
}
print "\n";
私は出力によって驚い: -
Iterate upto ggg...
-a -> aaa
-c -> ccc
-g -> ggg
Iterate All...
-f -> fff
-e -> eee
-d -> ddd
-b -> bbb
私は最初の出力は、内部順序に応じて、「n」の要素となることができるように、キーがハッシュされていることを理解しています。しかし、なぜ後で配列をループすることができないのですか?どうしましたか ?
おかげで、
感謝を反復するために、あなたのコード内でキー%セットを使用することができます。ところで、「それぞれ」を最初に戻すことは可能ですか? –
"%hash =%hash"が機能しているようです。 – jrockway
(perlfaq4は、voidコンテキストでハッシュの "keys"を呼び出すことを提案しています。これは不必要なコピーを避けることができます)。 – jrockway