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