在Perl中,当您需要使用字符串作为数据结构中的键时,您正在寻找HASH
内置类型,由%
sigil指定。Perl散列的一个很好的特性是,您不必预先声明复杂的数据结构。您可以使用它,Perl将根据该用法推断出结构。
my @file = qw(ipax3_2011_01_27.txt ipax3_2011_02_01.txt ipax3_2011_02_03.txt);
my %ipax3;
for (@file) {
if (/^ipax3_(d{4}_d{2})_(d{2}).txt$/) {
$ipax3{$1}{$2} = $_
}
else {
warn "bad file: $_
"
}
}
for my $year_month (keys %ipax3) {
my $days = keys %{ $ipax3{$year_month} };
if ($days > 1) {
print "$year_month has $days files
";
}
else {
print "$year_month has 1 file
";
}
}
其打印:
2011_01 has 1 file
2011_02 has 2 files
要查看各个文件,请执行以下操作:
my $year_month = 2011_02 ;
my $day = 01 ;
my $file = $ipax3{$year_month}{$day};
上面我使用keys
函数的返回值作为要迭代的列表和天数。这是可能的,因为<code>键
my $number = keys %ipax3; # number of year_month entries
my @keys = keys %ipax3; # contains ( 2011_01 , 2011_02 )
my @days = keys %{ $ipax{$year_month} };
在最后一个示例中,%ipax
中的每个值都是对哈希的引用。由于keys
采用文字哈希,因此需要将$ipax{$year_month}
封装在%{…}
中。在perl v5.13.7+中,您可以省略%{…}
围绕键
的参数以及其他一些数据结构访问函数。