2011-07-15 101 views
3

的哈希值,但我不能讓內一套鑰匙...如何構建我需要比較兩個哈希散列

my %HASH = ('first'=>{'A'=>50, 'B'=>40, 'C'=>30}, 
      'second'=>{'A'=>-30, 'B'=>-15, 'C'=>9}); 
foreach my $key (keys(%HASH)) 
{ 
    my %innerhash = $options{$key}; 
    foreach my $inner (keys(%innerhash)) 
    { 
     print "Match: ".$otherhash{$key}->{$inner}." ".$HASH{$key}->{$inner}; 
    } 
} 

回答

4

$options{$key}是一個標量(你可以告訴被領先$符印)。你要「解引用」,它用它作爲哈希:

my %HASH = ('first'=>{'A'=>50, 'B'=>40, 'C'=>30}, 
      'second'=>{'A'=>-30, 'B'=>-15, 'C'=>9}); 
foreach my $key (keys(%HASH)) 
{ 
    my %innerhash = %{ $options{$key} }; # <---- note %{} cast 
    foreach my $inner (keys(%innerhash)) 
    { 
     print "Match: ".$otherhash{$key}->{$inner}." ".$HASH{$key}->{$inner}; 
    } 
} 

當你準備好要真正深入到這些東西,看到perllolperldscperlref

+0

我不知道,你可以在PERL投下變量,謝謝非常! –

+1

@ mob的答案是「perldoc perlreftut」中的「使用規則1」的應用程序,因此您應該從該文檔開始。 – tadmc

1

我猜你說「選項」在那裏你的意思是「哈希」?

哈希只存儲標量,而不是其他哈希; %HASH的每個值是一個散列引用需要被解除引用,所以你的內循環應該是:

foreach my $inner (keys(%{ $HASH{$key} }) 

或者:

my %HASH = ('first'=>{'A'=>50, 'B'=>40, 'C'=>30}, 
      'second'=>{'A'=>-30, 'B'=>-15, 'C'=>9}); 
foreach my $key (keys(%HASH)) 
{ 
    my $innerhash = $HASH{$key}; 
    foreach my $inner (keys(%$innerhash)) 
    { 
     print "Match: ".$otherhash{$key}->{$inner}." ".$innerhash->{$inner}; 
    } 
}