Perl的hash类型使用

访问hash元素

$hash{$some_Key}

hash有自己的命名空间,也就是说 \$ family_name{"Li"}和子程序&family_name之间毫无关系,perl 是根据名称前后的标点符号来确定它的真实意义的,这点跟cpp,java这些语言不同。例如,perl允许同时有\$ name和\$ name[5]。

$family_name{'fred'} = 'astaire'

访问整个hash

使用%作为前缀,hash可以转换成列表,可以采用下面的方式赋值。

%name_number = ('LiXin','09210047','XueChao','09210028')
@any_array = %name_number

我们称这个变换叫展开哈希,将它变成key-value对列表。注意展开时,不一定按原来顺序,但可以肯定的是每一个key-value肯定是相邻出现的。

hash赋值

my %new_hash = %old_hash

赋值的过程其实是将%old_hash展开成列表,然后通过列表重新构造得到%new_hash

胖箭头

my %last_name = (
'fred' => 'flintstone',
'dino' => undef,
'barney => 'rubble',
);

这只是逗号的另外一种写法,并无它意,只是为了更方便看。

keys和values函数

my %last_name = (
'fred' => 'flintstone',
'dino' => undef,
'barney => 'rubble',
);
my @k = keys %last_name;
my @v = values %last_name;

返回的数组k和v一定是一一对应的。 如果使用标量上下文,keys和values会返回hash中元素的个数:

my $count = keys %hash;

each函数

while(($key,$value) = each %hash){
print "$key => $value\n";
}

foreach $key (sort keys %hash){
$value = $hash{$key};
print "$key => $value\n";
}

exists函数

if(exists $hash{$some_key})
{
print "this some_key exists in the hash";
}

exists函数

检查hash里是否存在指定键。

if(exists $hash{$some_key})
{
print "this some_key exists in the hash";
}

delete函数

删除hash中的键。

my $person = 'betty'
delete $books{$person}

Comments !