哈希是key/value对的集合。Perl中的哈希以%标记开始。访问哈希元素的格式为${Key}。
%hash = ('google','www.google.com','baidu','www.baidu.com');
print "\$hash{google} = $hash{google}\n";
创建哈希
1.为每个key设置value
例:
$hash{'amazon'} = 'www.amazon.com';
print "\$hash{amazon} = $hash{amazon}\n";
2.通过列表设置
列表中的第一个元素为key,第二个元素为value。
%hash = ('google','www.google.com','baidu','www.baidu.com');
也可以使用key=>value来进行设置:
%hash = ('google'=>'www.google.com','baidu'=>'www.baidu.com');
也可以使用-来代替引号
%hash = (-google=>'www.google.com',-baidu=>'www.baidu.com');
注:使用这种方式定义在输出元素的时候需要使用以下方式:
print "\$hash{-baidu} = $hash{-baidu}\n";
读取哈希值
可以像读取数组一样读取哈希表,哈希值提取到数组的方式为@{key1, key2}。
例:
%hash = (-google=>'www.google.com',-baidu=>'www.baidu.com');
@array = @hash{-google, -baidu};
print "@array\n";
读取哈希的key和value
我们可以使用keys函数读取hash的所有键,格式如下:
keys %HASH
例:
%hash = (-google=>'www.google.com',-baidu=>'www.baidu.com');
@keys = keys %hash;
print "$keys[0]\n";
print "$keys[1]\n";
类似的我们也可以使用values函数读取所有的value值。
values %HASH
例:
%hash = (-google=>'www.google.com',-baidu=>'www.baidu.com');
@values = values %hash;
print "$values[0]\n";
print "$values[1]\n";
检测元素是否存在
当你在哈希中读取不存在的key/value对时会返回undefined值,且在执行时会有警告提醒。可以使用exists函数来判断key是否存在,如果存在则读取。
例:
%hash = (-google=>'www.google.com',-baidu=>'www.baidu.com');
if(exists($hash{-google})){
print "Key exists.\n";
}else{
print "Key does not exist.\n";
}
获取哈希的大小
可以通过获取哈希的键或者值的数组然后在计算相应数组的大小。
例:
%hash = (-google=>'www.google.com',-baidu=>'www.baidu.com');
@array = keys %hash;
$size = @array;
print "$size\n";
哈希中添加或删除元素
添加key/value可以通过简单的赋值完成,使用delete函数删除哈希元素。
删除示例:
%hash = (-google=>'www.google.com',-baidu=>'www.baidu.com');
delete $hash{-baidu};
@keys = keys %hash;
print "@keys\n";
@values = values %hash;
print "@values\n";
each函数
each函数可以列举出hash中的所有key/value对。但是在使用each循环的时候不要添加元素,这是不合法的。
例:
%hash = (-google=>'www.google.com',-baidu=>'www.baidu.com');
while(($key, $value) = each %hash){
print "($key, $value)\n";
}