哈希
2019-03-25 本文已影响0人
食梦狸猫
哈希可以容纳任意多的值并且能按需使用,且哈希以key值索引。哈希的值可以是数字,字符串,undef的组合。但key一定是字符串。哈希有自己的名字空间
访问哈希元素
some_key}
这和访问数组做法类似,只是用了花括号而且此时的键表达式是字符串。
-
对已经存在的哈希元素赋值,会覆盖之前的值
-
哈希元素会因赋值而诞生
-
访问哈希表里不存在的值会得到undef
访问整个哈希
要访问整个哈希,可以用百分号%:%family_name。
同样对整个哈希赋值,列表中的元素应该是键值对:
%some_hash = ('foo',35,'bar',12.4,2.5,'hello')
@any_array = %some_hash #展开哈希,得到的键值对顺序不会像当初一样,因为perl对哈希的快速检索存储做了特别的排序。
- 哈希可以用一般的赋值语法来复制:
my %new_hash = %old_hash;
my %inverse_hash = reverse %any_hash;
#perl中会用列表中最后的键覆盖之前的键
胖箭头
这只是对哈希里逗号的另一种写法
my %last_name = (
'fred' => 'flintstone',
'dino' => undef,
)
哈希函数
- keys函数和values函数
keys函数能返回哈希的键列表,values函数能返回哈希的值列表。若没有成员则返回空列表
my @k = keys %hash;
而在标量上下文中,这两个函数会返回元素个数。
my $count = keys %hash;
- each函数
each函数以迭代整个哈希,返回时是包含两个元素的列表,没有键值对了就会返回空列表。
while (($key,$value) = each %hash)
{
print "$key => $value\n";
}
哈希的应用
- exists函数
判断哈希里是否存在某个键
if(exist $books{"dino"})
{
}
- delete函数
delete $books{"betty"}{}
这和把undef存入哈希元素是不同的,存入undef后,键是一定会存在的。
%ENV哈希
Perl访问运行环境可通过访问%ENV哈希,例如读取PATH值
print "PATH is $ENV{PATH}\n";