最近在寫perl腳本的時候用foreach遍歷hash的時候,出現遇到了一個問題,就是說當hash為一層的時候,並不會有問題,但是當hash類型結構比較復雜的時候,就會有需要注意的地方了。
還是舉例子說明最實際一些了,例如下面的這個%hash
1 my %hash; 2 3 %hash = ("小明"=>{'語文'=>50, '數學'=>60}, 4 "小剛"=>{'語文'=>80, '數學'=>90}); 5 6 foreach my $key ( keys %hash ) 7 { 8 print "$key:\n"; 9 my %subhash = $hash{$key}; 10 foreach my $subkey ( keys %subhash ) 11 { 12 print "\t$subkey => $subhash{$subkey}\n"; 13 } 14 }
一開始我就是這樣來寫的,覺的很正常啊,就是普通的嵌套循環唄,但是一執行,就開始報錯了,提示$subkey是一個hash類型,后來在網上找了半天找到了一個例子,明白了怎么回事了,
修改如下:
my %hash; %hash = ("小明"=>{'語文'=>50, '數學'=>60}, "小剛"=>{'語文'=>80, '數學'=>90}); foreach my $key ( keys %hash ) { print "$key:\n"; my $subhash = $hash{$key}; foreach my $subkey ( keys %$subhash ) { print "\t$subkey => $$subhash{$subkey}\n"; } }
在第二次遍歷hash的子集的時候要吧$hash看成一個整體,弄明白了這個了,也給自己記錄一個下。