Perl中的哈希數據結構。相比較於數組,這種數據結構對於數據查找和統計更加方便。數組
一個特殊的哈希,%ENV,表示當前terminal下,經過setenv設置的variable的鍵值。數據結構
鍵:環境變量名,,,,值:環境變量值。函數
哈希是一種數據結構,由一對對的鍵(keys)--值(values)對來組成。字符串
這些鍵和值都是任意的標量,但鍵總會被轉換成字符串並且必須是惟一的字符串。terminal
訪問哈希元素, $hash{$some_key} ##和訪問數組的作法相似,只是使用了花括號{}而非方括號[]。hash
訪問哈希表中不存在的值獲得undef。ast
$family_name{'barney'} = 'rubble' ##完成對某一哈希元素的單一賦值變量
訪問整個哈希, %family_name ##此時哈希被轉換成列表,列表中的元素爲鍵--值對。foreach
%family_name = ('foo', 35, 'bar', 12.4);統計
my %new_hash = %old_hash ##整個hash的賦值,會先將hash分解爲鍵值對,
後在將鍵值對合併爲hash。因此先後順序可能改變。
還能夠將hash寫爲以下的方式來進行賦值 my %last_name = (
'fred' => 'flintstone',
'dino' => undef
);
=>稱爲胖箭頭,來顯式的指出其中的鍵值對,其中鍵的''能夠省略。 $score{'fred'}也能夠直接簡寫爲$score{fred}。
哈希中的函數。
keys和values分別返回hash中的鍵列表和值列表。my @k = keys %hash; my @v=values %hash;
在標量上下文中,分別返回鍵元素和值元素的個數。
if(%hash) {print "....";} ##在標量上下文,只要hash中有至少一個鍵值對,就返回真。
each函數,從哈希中返回一組鍵值。
while ( ($key, $value) = each %hash ) {print "....";} ##在while中時標量上下文,返回2或0.
exists函數,檢查哈希中是否存在某個鍵。
if (exists $book{"dino"}) {print "....";}
delete函數,刪除哈希中的某個鍵值,不是賦值undef,而是直接刪除。
delete $books{$person};
不能夠在雙引號內,直接內插整個hash。
foreach $persons (sort keys %books)
if( $books($persons) ) {print "$person has $books{persons}";} ##只能夠這樣完成單個哈希的內插