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'
}
}
};