
哈希
|
123
key
,
…
)
这样的新列表,达成键值互换。当结果存回
%inverse_hash
时,我们就能以
原本在
%any_hash
里的值进行检索,现在它已经成为
%inverse_hash
的键,而按它
找到的值则是
%any_hash
里的某个键。现在我们能按“值”(现在是键)来找“键”
(现在是值)了。
当然,思维缜密的读者可能已经猜到,这种技巧只能在原始哈希的值不重复的情况下
才能奏效,否则就会导致新哈希中有重复键,而哈希的键必须唯一。所以在不断赋值
的过程中,最后那个键的值替换了之前的赋值,成为最终的结果。
我们知道,键
-
值对在哈希松绑之后的顺序是无法预知的,所以也就无法预知最后哪
些键
-
值对会被覆盖。这个技巧最好是在确定原始哈希的值是唯一的情况下使用,比
如前面提到的
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
能让我们将此类列表中的键与值成对组合,方便区别谁是谁,岂不更好? ...