
哈希
|
121
效,否则就会导致新哈希中有重复键,而哈希的键必须唯一。所以在不断赋值的过程
中,最后那个键的值替换了之前的赋值,成为最终的结果。
我们知道,键
-
值对在哈希松绑之后的顺序是无法预知的,所以也就无法预知最后哪
些键
-
值对会被覆盖。这个技巧最好是在确定原始哈希的值是唯一的情况下使用,比
如前面提到的
IP
地址和主机名相互检索的例子:
%ip_address = reverse %host_name;
现在,我们不但能按主机名查询
IP
地址,也能反过来按
IP
地址查询主机名。
胖箭头
使用列表对哈希赋值时往往难以区分键和值的成对关系。比如下面的代码中,我们要
仔细扫描并逐个默念:“键、值,键、值……”,才能搞清楚第
5
个元素
2.5
其实是
键,不是值:
%some_hash = ('foo', 35, 'bar', 12.4, 2.5, 'hello',
'wilma', 1.72e30, 'betty', "bye\n");
如果
Perl
能让我们将此类列表中的键与值成对组合,方便区别谁是谁,岂不更好?
Larry
也有感于此,因此他发明了胖箭头(
=>
)。对
Perl
而言,它只是逗号的另一种
写法,所以有时候也称它为胖逗号。也就是说,在任何需要逗号(
,
)的地方都可以用
胖箭头代替,这对
Perl
来说没什么区别。改写上面的代码如下:
my %last_name = ( #
哈希也可以是词法变量
'fred' => 'flintstone',
'dino' => undef,