我試圖循環使用每個循環的a上的每個散列。看起來$ k $ v沒有更新。誰能解釋一下?在foreach循環上使用每個關鍵字的perl循環散列
%hash = (a=>5,b=>6);
foreach(my ($k,$v) = each %hash){
print "\neach loop : $k $v\n";
}
output :
each loop : a 5
each loop : a 5
我試圖循環使用每個循環的a上的每個散列。看起來$ k $ v沒有更新。誰能解釋一下?在foreach循環上使用每個關鍵字的perl循環散列
%hash = (a=>5,b=>6);
foreach(my ($k,$v) = each %hash){
print "\neach loop : $k $v\n";
}
output :
each loop : a 5
each loop : a 5
使用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";
}
你需要做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}; }
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;
}
嗨感謝您的代碼。我想知道爲什麼使用foreach循環不能按預期工作。 – user2763829
@LeoNerd在他的回答中解釋說。 –