=pod 哈希 哈希表里只是一堆的键值对而已,而没有任何顺序,键可以是任意字符串,值也是 awk的哈希键值对增多的时候会逐渐变慢,而perl没有这个缺点 访问哈希元素: $hash{$some_key} foreach my $person (qw< barney fred >) { print "I'v heared of $person $family_name{$person}. "; } 在挑选哈希名的时候,最好使得哈希名和键之间能放进去一个"for"字,比如"family_name for fred"是filntstone, 因此把哈希命名为family_name能清晰地反映出键和值之间的关系。 $foo = 'bar'; print $family_name{$foo . 'ney'}; #打印"rubble",连接在一块 哈希可以被转换成列表 哈希赋值: 不是常见用法,但哈希真的可以用一般的赋值语法来赋值; my %new_hash = %old_hash; 得到一个反序的哈希:键值互换 my %inverse_hash = reverse %any_hash; 胖箭头: my $last_name = ( 'fred' => 'flintstone', 'dino' => 'undef', ); 哈希函数: perl中有很多有用的函数可以一次处理整个哈希。 keys函数能返回哈希的键列表,而values函数能返回对应的值列表。如果哈希没有任何的成员,则两个函数都返回空列表 my @k = keys %hash; my @v = values %hash; 上面的keys和values是一一对应的 得到哈希中元素的个数: my $count = keys %hash; my $count = values %hash; if(%hash) { } each函数: 唯一适合使用each的地方 while(my($key, $value) = each %hash) { } foreach函数: foreach $key (sort keys %hash) { } 判断某项哈希元素的真假: if($book{$some}) { } exists函数: 检查哈希中是否存在某个键,可以使用exists函数 if(exists $book{"dino"}) { } delete函数: my $person = "betty"; delete $book{$person}; #撤销$person的借书证 上面"将undef存入哈希元素"并不相同,在这两种情况下,exists($books{"betty"})会得出相反的结果。在delete之后,键便不会出现在哈希之中,但存入undef后,键却是一定会存在的。 哈希元素的内插: 可以将单一哈希元素内插到双引号引起的字符串中。 foreach $person (sort keys %books) { if($book{$person}) { print "$person has $books{$person} items "; #但这种方式不支持内插整个hash表 } } %ENV哈希: print “PATH is $ENV{PATH} ”; =cut