散列由键值对组成,其排列是没有顺序的。
%a #散列a
$a{c} #散列a中键c对应的值,注意括号的类型
keys %a #获取散列a的所有键,以数组形式返回
values %a #获取散列a的所有值,以数组形式返回
使用列表给散列赋值
%a=(键, 值, 键, 值); #实质是使用一个列表
%a=(键=>值, 键=>值); #效果相同,但视觉效果更好
%a=@c ;
散列赋值给数组
@a=%b; #所有键值对展开成列表
散列键值互换
%a=reverse %b; #应该在所有的值不重复的时候使用,否则难以预料后果
遍历散列
while (($k, $v)=each %a) {;} #一次返回一个键值对,直至全部访问
查看某个键是否存在
exists $a{c}; #在散列a中查看键c是否存在,若有则返回真,即使该键对应的值为undef。
%a=(1..3);
if ($a{3}) {print "t\n";} else {print "f\n";} #键“3”没有赋值,因此其值为undef,返回假
if (exists $a{3}) {print "t\n";} else {print "f\n";} #虽然键“3”对应的值为undef,但该键是存在的,因此返回真
删除某个键
delete $a{c}; #删除散列a中的键c
$a{c}=undef; #赋值为undef并不能删除该键
关于双引号字符串内的替换
由于%在双引号内没有特殊意义,所以不能替换整个散列。