Perl 编程/散列变量
外观
< Perl 编程
Perl 散列类似于普通数组,但它不使用整数索引,而是使用可以取任何标量值的“键”。这些通常是字符串或数字。
语法: 关联数组不使用 `@` 运算符,而是使用 `%` 符号,并且不像 `$myarray[0]` 中那样使用方括号 `[]`,散列元素使用花括号 `{}` 引用,如 `$myhash{"george"}`。
散列是 Perl 中最强大和最常用的功能之一。一个典型的用法是构建一个包含“字典”的散列,其中每个键都是字典中的一个词,相应的 value 是这些词的定义。
下面是一个包含各种家庭宠物发出的声音的散列
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!"
要从散列中删除一项,请使用删除. 将值设置为未定义不会删除该项; 使用存在在设置为未定义的键上,仍然会返回 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' } } };