4.3.1 雜湊的定義

雜湊很類似於陣列,但陣列是以數字做索引,雜湊則以字串做索引,這是最大的不同。雜湊的索引,我們稱為鍵(key),其對應的內容,我們稱為值(value),雜湊就是由一對對的 "鍵/值" 組合而成。換言之,雜湊是把某一套資料對應到另一套資料。比如:一組身份證字號對應到一組人的姓名;藉由找出某一個身份證字號,便可找到對應人的姓名。反之亦然。這就是雜湊的妙用。

雜湊的定義由:% 加上變數名稱而組成,比如:%all,範例如下:

%all=(

"t111222333" => "王大空",

"s444555666" => "李小二",

"k333111555" => "陳大一"

);

上式定義了 %all 這個雜湊,共有三對鍵/值。

其中,

$all{"t111222333"} 代表 "王大空"
$all{"s444555666"} 代表 "李小二"
$all{"k333111555"} 代表 "陳大一"


換言之,欲存取雜湊的值,只要使用 $雜湊名{鍵} 即可。

另,以下是另一種定義雜湊的方式,結果同上:

%all=("t111222333", "王大空", "s444555666", "李小二", "k333111555", "陳大一");

上式中,每二個二個配成鍵/值,形成雜湊。再如下例:

%MMM=("M", "a", "N", "b", "A", "c", "K", "d", "G", "e");

等同於:

%MMM=(
	M => a,
	N => b,
	A => c,
	K => d,
	G => e
);

最後一對可以不用 , 號。

也可以在設定值的過程,動態產生雜湊:

$HOSTNAME{"163.26.200.1"} = "dns.tnc.edu.tw";

這樣就產生了一個雜湊:%HOSTNAME,目前擁有一對鍵/值:163.26.200.1 對應至 dns.tnc.edu.tw

以下這個例子,在迴圈中動態產雜湊 %ppp:

for ($i=1; $i<=10; $i++) {

    $ppp{"kkk$i"}="ooo$i";

	$tmp="kkk$i";

	print "kkk" . $i . "===>" . "$ppp{$tmp}", "\n";

}

# 輸出結果:

kkk1===>ooo1
kkk2===>ooo2
kkk3===>ooo3
kkk4===>ooo4
kkk5===>ooo5
kkk6===>ooo6
kkk7===>ooo7
kkk8===>ooo8
kkk9===>ooo9
kkk10===>ooo10