perl的foreach循環的坑


最近在寫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看成一個整體,弄明白了這個了,也給自己記錄一個下。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM