2017-08-11 12 views
1

されたハッシュ値を使用して、下から http://perl.plover.com/FAQs/references.htmlPerlのリファレンス混乱配列

を見ながら、私は本当に @{ $table{$state} }

を理解していないことは、そのキー$stateと値である。このハッシュテーブルが配列であることを説明..これは基本的には と普通の%tableをとり、その値は配列になります。これは正しい方法ですか?

%{ $table{$state} }などもありますか?私はこれが何かを意味するかどうかわからない。

1 while (<>) { 
2 chomp; 
3 my ($city, $state) = split /, /; 
4 push @{$table{$state}}, $city; 
5 } 
6 
7 foreach $state (sort keys %table) { 
8 print "$state: "; 
9 my @cities = @{$table{$state}}; 
10  print join ', ', sort @cities; 
11 print ".\n"; 
12 } 
+0

['HoA'](http://perldoc.perl.org/perldsc.html#HASHES-OF-ARRAYS)と[' HoH'](http://perldoc.perl.org/perldsc。 html#HASHES-OF-HASHES) –

答えて

3

@{ }は逆参照です。 の値が$table{$state}であることは配列参照であると言います。

#!/usr/bin/env perl 

use strict; 
use warnings; 

my %table = (
    firstkey => [ 1, 2, 3 ], 
    secondkey => [ 'fish', 'bird', 'bat' ], 
); 


foreach my $key (keys %table) { 
    print $key, " is ", ref ($table{$key}), " with a value of ", $table{$key}, "\n"; 

    foreach my $value (@{$table{$key}}) { 
     print "\t$value\n"; 
    } 
} 

%{ $table{$state} }代わり配列参照のそこにハッシュ参照があった場合に働くだろう。

だから:

#!/usr/bin/env perl 

use strict; 
use warnings; 

my %table = (
    firstkey => { fish => 1, bird => 2, bat => 3 } 
); 


foreach my $key (keys %table) { 
    print $key, " is ", ref ($table{$key}), " with a value of ", $table{$key}, "\n"; 

    foreach my $subkey (keys %{$table{$key}}) { 
     print "$subkey => $table{$key}{$subkey}\n" 
    } 
} 

本のコアがダウンPerlが多次元データ構造を実装する方法である - それは、サブアレイの単一の「値」に格納する参照を介してそうします。

+0

非常にクリアです。ありがとうございます! – user3502374