2013-03-23 3 views
0

У меня есть следующий код:Perl - смесь массивов и хешей

my @tmpRowArr =(); 
    while (my $row1 = $sth->fetchrow_hashref()) { 
     push (@tmpRowArr, $row1); 
    } 
    $cached_query_hash{$uniqKey} = \@tmpRowArr; 

, который используется для хранения результатов из запроса DB в хэш-реф. Отображается правильно. Затем я хочу прочитать значения, но это не работает:

my @tmpRowArr2 = $cached_query_hash{$$value{'id'}} ; 
    foreach (@tmpRowArr2){ 
     print $_->{id} ; 
    } 

Любые идеи будут оценены.

ответ

0

Это кажется, что это позволит решить проблему:

Первые строки:

$cached_panelists_hash{$$value{'id'}} = \@tmpRowArr; 

Последняя строка:

my @tmpRowArr2 = @{ $cached_panelists_hash{$$value{'id'}} }; 
1

Если объединить две линии

$cached_query_hash{$uniqKey} = \@tmpRowArr; 
... 
my @tmpRowArr2 = $cached_query_hash{$$value{'id'}} ; 

Вы можете уменьшить их

my @tmpRowArr2 = \@tmpRowArr; 

Который должен показать, почему он не работает: Вы Назначив реф массив в массив. Вам нужно еще один уровень разыменования:

my $aref = $cached_query_hash{$$value{'id'}}; 
for (@$aref) { 
    print $_->{id}; 
} 
+0

Спасибо за ответ , Наконец я понял. См. Мой собственный ответ. –

+0

Да ... вы приняли мой ответ и разместили его как свой собственный ответ. : P Вы должны быть осторожны, что '@ tmpRowArr' выходит за рамки между назначениями, так что несколько клавиш не относятся к одному и тому же массиву. – TLP

Смежные вопросы