使用哈希值为数组的perl引用混淆

时间:2017-08-11 07:40:47

标签: perl

看着 http://perl.plover.com/FAQs/references.html

从下面,我真的不明白  @{ $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  }

1 个答案:

答案 0 :(得分: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如何实现多维数据结构 - 它通过将引用存储在子数组的单个“值”中来实现。