2014-06-12 83 views

回答

3

使用while循環。

#!/usr/bin/perl 
use strict; 
use warnings; 
my %hash = (a=>5,b=>6); 
while (my ($key, $value) = each %hash) { 
      print "Key is $key, value is $value\n"; 
} 

Demo

另見:Is perl's each function worth using?

+0

嗨感謝您的代碼。我想知道爲什麼使用foreach循環不能按預期工作。 – user2763829

+0

@LeoNerd在他的回答中解釋說。 –

1

你需要做while而不是foreach

my %hash = (a=>5,b=>6); 
while(my ($k,$v) = each %hash){ 
    print "\neach loop : $k $v\n"; 
} 

然而,each()gotachas,你需要知道的,所以我寧願只使用keys,像這樣:

for my $k (keys %hash) { my $v = $hash{$k}; } 
4

foreach取值的列表,每個值執行它的循環體,分配一些變量($_如果未指定的)每次:

foreach (1, 2, 3) { 
    print "The value is $_\n"; 
} 

在你的情況,你給它一個兩件事情的清單,作爲哈希的第一個關鍵和價值。此外,您還分配了這兩個新變量,$key$value是關鍵和值。因此,你的循環執行兩次,這些變量始終保持不變。

一種更好的方式來遍歷鍵和值從哈希是迭代鍵的名單上,每次取一個值:

foreach my $key (keys %hash) { 
    my $value = $hash{$key}; 
    ... 
} 

或者,你可能會從1.39 List::Util版享受pairs功能:

foreach my $pair (pairs %hash) { 
    my $key = $pair->key; 
    my $value = $pair->value; 
}