9.3 散列的数组: Vsftp:/root/perl/6# cat a3.pl @AoH = ( { husband => "barney", wife => "betty", son => "bamm bamm", }, { husband => "george", wife => "jane", son => "elroy", }, { husband => "homer", wife => "marge", son => "bart", }, ); print @AoH; print " "; print $AoH[0]->{son}; print " "; Vsftp:/root/perl/6# perl a3.pl HASH(0x1302d48)HASH(0x131f6d8)HASH(0x131f750) bamm bamm 要向数组中增加另外一个散列,你可以简单地说: Vsftp:/root/perl/6# cat a3.pl @AoH = ( { husband => "barney", wife => "betty", son => "bamm bamm", }, { husband => "george", wife => "jane", son => "elroy", }, { husband => "homer", wife => "marge", son => "bart", }, ); print @AoH; print " "; print $AoH[0]->{son}; print " "; push @AoH, { husband => "fred", wife => "wilma", daughter => "pebbles" }; print @AoH; print " "; Vsftp:/root/perl/6# perl a3.pl HASH(0x1dbdd48)HASH(0x1de5590)HASH(0x1de5608) bamm bamm HASH(0x1dbdd48)HASH(0x1de5590)HASH(0x1de5608)HASH(0x1dda408) 9.3.2 生成散列的数组: Vsftp:/root/perl/6# cat a4.pl open (A,bb); while (<A>){ my @arr=(); my @arr= split(/s+/,$_); print "@arr is @arr "; ##定义散列引用 my $rec={}; for $field (@arr){ ($key, $value) = split /=/, $field; $rec->{$key} = $value; } push @AoH, $rec; print @AoH; print " "; }; print "1111111111111 "; print @AoH; print " "; print %{$AoH[0]}; print " "; print %{$AoH[1]}; print " "; Vsftp:/root/perl/6# cat bb husband=fred friend=barney aa=bb cc=dd Vsftp:/root/perl/6# perl a4.pl @arr is husband=fred friend=barney HASH(0x25bed48) @arr is aa=bb cc=dd HASH(0x25bed48)HASH(0x25beb98) 1111111111111 HASH(0x25bed48)HASH(0x25beb98) friendbarneyhusbandfred ccddaabb /**************************************** Vsftp:/root/perl/6# cat a10.pl open (A,cc); while (<A>){ ##创建hash引用 $rec={}; my @arr=split(/s+/,$_); foreach (@arr){ ($key, $value) = split /=/, $_; $rec->{$key} = $value; }; }; %h= %{$rec}; print $h{friend}; print " "; print $h{husband}; print " "; Vsftp:/root/perl/6# cat cc husband=fred friend=barney Vsftp:/root/perl/6# perl a10.pl barney fred Vsftp:/root/perl/6# cat a11.pl use Data::Dumper; open (A,cc); while (<A>){ ##创建hash引用 $rec={}; my @arr=split(/s+/,$_); foreach (@arr){ ($key, $value) = split /=/, $_; $rec->{$key} = $value; }; push @AoH ,$rec; }; print Dumper(@AoH); print " "; print $AoH[0]->{husband}; print " "; Vsftp:/root/perl/6# perl a11.pl $VAR1 = { 'friend' => 'barney', 'husband' => 'fred' }; fred 9.3.3 访问和打印散列的数组 你可以用下面的方法设置一个特定散列的数值/键值对 Vsftp:/root/perl/6# cat a11.pl use Data::Dumper; open (A,cc); while (<A>){ ##创建hash引用 $rec={}; my @arr=split(/s+/,$_); foreach (@arr){ ($key, $value) = split /=/, $_; $rec->{$key} = $value; }; push @AoH ,$rec; }; print Dumper(@AoH); print " "; print $AoH[0]->{husband}; print " "; $AoH[0]{pet} = "dino"; print Dumper(@AoH); Vsftp:/root/perl/6# perl a11.pl $VAR1 = { 'friend' => 'barney', 'husband' => 'fred' }; fred $VAR1 = { 'pet' => 'dino', 'friend' => 'barney', 'husband' => 'fred' }; 你可以用下面的方法打印所有的数据: ##遍历每个引用 for $href (@AoH){ ##%{$href} 解引用,打印键和值 for $key (keys %{$href}){ print "$key---$href->{$key}"; print " "; } };