2009-10-18 3 views
4

Perl предупреждает меня об использовании псевдо hashs в моей программе:Почему Perl предупреждает меня об использовании псевдохешей?

Псевдо-хэши устаревшие

Как преобразовать следующий код, который не использует псевдо hashs

foreach my $hash (@arrayOfHash) { 
      print keys %{$hash}; 
    } 

ответ

10

Проблема не в том коде. Проблема в том, что @arrayOfHash фактически содержит arrayrefs, а не hashrefs.

Если по каким-то причинам вы не можете исправить @arrayOfHash, вы можете работать вокруг него, делая:

foreach my $hash (@arrayOfHash) { 
    my %hash = @$hash; 
    print keys %hash; 
} 
+0

Это хорошо, что он осуждался потом. –

+1

«работа вокруг» немного щедро, если ни мы, ни вопрошающий, похоже, не знаем, что именно находится в @arrayOfHash. Сначала сделайте это, затем сделайте что-нибудь. Ваш код будет полезен только в одном ограниченном случае ошибки. – ysth

5

Вы всегда должны опубликовать полный пример кода .....

Не уверен, что вы делаете, но вы, вероятно, смешиваете массивы и массивы refs и/или хэши и hashrefs. Я обычно использую только ссылки, как мне нравится синтаксис лучше, и я хотел бы быть последовательным:

use strict; 
use warnings; 

my($arrayrefOfHashrefs) = [ 
          {foo => 'bar', 
          bar => 'baz'}, 
          {Hello => 'world'}, 
          ]; 

foreach my $href (@$arrayrefOfHashrefs) { 
    print join("\n", keys %$href); 
    print "\n\n"; 
} 

напечатает:

C:\Temp>perl foo.pl 
bar 
foo 

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