2016-08-07 25 views
-2

配列の各要素でハッシュにアクセスするのに問題がありますが、それは最後の要素を与えました。配列のすべての要素にアクセスするにはどうすればよいですか?Perlでハッシュの配列にアクセスする

@stem =(); 
for($i=0;$i<2;++$i){ 
    push @stem,{u1=>1 , u2 => 2 , u3 => 3}; 
} 
@ants =(); 
$count = 0; 
for($i=0;$i<scalar(@stem);++$i){ 
    @allowed =(); 
    %hash =(); 

    for($j=0;$j<scalar(@stem);++$j){ 
     push @allowed,{stem=>++$count,hinfo=>++$count}; 
    } 
    %hash = (allowed=>\@allowed ,solution=>++$count); 
    push (@ants,\%hash); 

} 

for($i=0;$i<scalar(@ants);++$i){ 
    %test = %{$ants[$i]}; 
    print "=>",$test{solution},"\n"; 
    @temp = @{$test{allowed}}; 
    for($j=0;$j<scalar(@temp);++$j){ 
     print $j,":",$temp[$j]->{stem}," ",$temp[$j]->{hinfo},"\n"; 
    } 
} 

出力:
=> 21
0時16分16
午前1時18分18
2時20分20
=> 21
0時16分16
午前1時18分18
2:20 20

+2

スタート。警告を使用します;そしてどこでもグローバル変数を使用しないでください。 – melpomene

答えて

0

1つの変数@allowedと1つの変数%hashを参照してください。これらの参照は常に同じ値になります(ループの最終反復でクリアされて設定されます)。

は、ループ内でそれらを宣言し、あなたはループを、新たな変数への参照を毎回取得されます: `厳格な使用と

for($i=0;$i<scalar(@stem);++$i){ 
    my @allowed; 
    my %hash; 

    for($j=0;$j<scalar(@stem);++$j){ 
     push @allowed,{stem=>++$count,hinfo=>++$count}; 
    } 
    %hash = (allowed=>\@allowed ,solution=>++$count); 
    push (@ants,\%hash); 
} 
関連する問題