2016-08-07 2 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

Поскольку существует только одна переменная @allowed и одна переменная %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); 
} 
Смежные вопросы