Perl 编程/哈希变量
外观
< Perl 编程
(从 Perl 编程/哈希变量 重定向)
Perl 哈希类似于普通数组,但它不使用整数索引,而是使用可以取任何标量值的“键”。这些通常是字符串或数字。
语法:关联数组使用%
符号而不是@
运算符,并且不像$myarray[0]
那样使用方括号[]
,而是使用花括号{}
引用哈希元素,就像$myhash{"george"}
一样。
哈希是 Perl 中最强大和最常用的功能之一。一个典型的用法是构建一个包含“字典”的哈希,其中每个键都是字典中的一个词,对应的值是这些词的定义。
下面是一个包含各种家用宠物发出的声音的哈希
my %petsounds = ("cat" => "meow",
"dog" => "woof",
"snake" => "hiss");
'=>' 和 ','实际上是可互换的,所以右侧看起来可能与数组完全一样。这意味着你可以将数组分配给哈希。在这样的分配中,数组中每个偶数索引(从 0 开始)的元素都成为哈希中的一个键。以下语句创建与前面相同的哈希
my @array = ("cat", "meow", "dog", "woof", "snake", "hiss");
my %petsounds = @array;
但第一种风格更受欢迎,因为它使语句更易读。
要访问哈希元素,使用花括号
print STDOUT "The cat goes " . $petsounds{"cat"} . ".\n";
将打印以下内容到 STDOUT
The cat goes meow.
要将新的声音项添加到哈希
$petsounds{"mouse"} = "squeak!";
要覆盖现有元素,只需重新分配它
$petsounds{"dog"} = "arf!"; # The dog now goes "arf!"
要从哈希中删除项,使用delete. 将值设置为undef不会删除该项;使用exists在已设置为undef的键上,仍然会返回 true。
delete($petsounds{"cat"}); # will remove "cat" from our hash
最初,“哈希”被称为“关联数组”,但这个术语有点过时(人们只是厌倦了使用七个音节)。虽然对编程新手来说并不直观,“哈希”现在是首选术语。这个名字来源于计算机科学术语,哈希表。
如果你知道 PHP,你可能已经想到了用某种便捷的方式打印数组内容,就像print_r
所做的那样...
use Data::Dumper;
print Dumper(\%hash);
要获取哈希的大小,只需在标量上下文中计算keys
函数的结果的大小
my %hash = (
'key1' => 1,
'key2' => 2
);
print "Hash has " . keys(%hash) . " elements\n";
my $num_elements = scalar(keys(%hash));
你可以定义多维哈希数组变量。一个例子可能看起来像这样
#!/usr/bin/perl
use Data::Dumper;
my %a=();
$a{1}{"a"}{"A"}="FIRST";
$a{1}{"c"}{"B"}="THIRD";
$a{1}{"b"}{"C"}="SECOND";
foreach my $k1 ( sort keys %a ) {
foreach my $k2 ( sort keys %{$a{$k1}} ) {
foreach my $k3 ( sort keys %{$a{$k1}{$k2}} ) {
print "$k1\t$k2\t$k3\t$a{$k1}{$k2}{$k3}\n";
}
}
}
print Dumper(\%a);
这段代码将产生
1 a A FIRST 1 b C SECOND 1 c B THIRD $VAR1 = { '1' => { 'c' => { 'B' => 'THIRD' }, 'a' => { 'A' => 'FIRST' }, 'b' => { 'C' => 'SECOND' } } };