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