哈希是key/value對的集合。
Perl中哈希變數以百分號(%) 標記開始。
存取哈希元素格式: ${key} 。
以下是一個簡單的哈希實例:
實例
#!/usr/bin/perl %data = ( ' google ' , ' google.com ' , ' codercto ' , ' codercto.com ' , ' taobao ' , ' taobao.com ' ) ; print " $ data{'google'} = $data {'google'} n " ; print " $ data{'codercto'} = $data {'codercto'} n " ; print " $ data{'taobao'} = $data {'taobao'} n " ;執行以上程序,輸出結果為:
創建哈希
創建哈希可以透過以下兩種方式:
一、為每個key 設定value
$data{'google'} = 'google.com';$data{'codercto'} = 'codercto.com';$data{'taobao'} = 'taobao.com';二、透過列表設定
列表中第一個元素為key,第二個為value。
%data = ('google', 'google.com', 'codercto', 'codercto.com', 'taobao', 'taobao.com');也可以使用=>符號來設定key/value:
%data = ('google'=>'google.com', 'codercto'=>'codercto.com', 'taobao'=>'taobao.com');以下實例是上面實例的變種,使用-來代替引號:
%data = (-google=>'google.com', -codercto=>'codercto.com', -taobao=>'taobao.com');
使用這種方式key 不能出現空格,讀取元素方式為:
$val = $data{-google}$val = $data{-codercto}訪問哈希元素
存取哈希元素格式: ${key} ,實例如下:
實例
#!/usr/bin/perl %data = ( ' google ' => ' google.com ' , ' codercto ' => ' codercto.com ' , ' taobao ' => ' taobao.com ' ) ; print " $ data{'google'} = $data {'google'} n " ; print " $ data{'codercto'} = $data {'codercto'} n " ; print " $ data{'taobao'} = $data {'taobao'} n " ;執行以上程序,輸出結果為:
讀取哈希值
你可以像數組一樣從哈希中提取值。
哈希值提取到數組語法格式: @{key1,key2} 。
實例
#!/uer/bin/perl %data = ( - taobao => 45 , - google => 30 , - codercto => 40 ) ; @array = @data { - taobao , - codercto } ; print " Array : @array n " ;執行以上程序,輸出結果為:
Array : 45 40
讀取哈希的key 和value
讀取所有key
我們可以使用keys函數讀取哈希所有的鍵,語法格式如下:
keys %HASH
該函數傳回所有哈希的所有key 的陣列。
實例
#!/usr/bin/perl %data = ( ' google ' => ' google.com ' , ' codercto ' => ' codercto.com ' , ' taobao ' => ' taobao.com ' ) ; @names = keys %data ; print " $names [0] n " ; print " $names [1] n " ; print " $names [2] n " ;執行以上程序,輸出結果為:
taobaogooglecodercto
類似的我們可以使用values函數來讀取哈希所有的值,語法格式如下:
values %HASH
該函數傳回所有哈希的所有value 的陣列。
實例
#!/usr/bin/perl %data = ( ' google ' => ' google.com ' , ' codercto ' => ' codercto.com ' , ' taobao ' => ' taobao.com ' ) ; @urls = values %data ; print " $urls [0] n " ; print " $urls [1] n " ; print " $urls [2] n " ;執行以上程序,輸出結果為:
taobao.comcodercto.comgoogle.com
檢測元素是否存在
如果你在雜湊中讀取不存在的key/value 對,會回傳undefined值,執行時會有警告提醒。
為了避免這種情況,我們可以使用exists函數來判斷key是否存在,存在的時候讀取:
實例
#!/usr/bin/perl %data = ( ' google ' => ' google.com ' , ' codercto ' => ' codercto.com ' , ' taobao ' => ' taobao.com ' ) ; if ( exists ( $data { ' facebook ' } ) ) { print " facebook 的網址為$data {'facebook'} n " ; } else { print " facebook 鍵不存在n " ; }執行以上程序,輸出結果為:
facebook 鍵不存在
以上程式碼中我們使用了IF...ELSE語句,在後面的章節我們會具體介紹。
獲取哈希大小
哈希大小為元素的個數,我們可以透過先取得key 或value 的所有元素數組,再計算數組元素多少來取得哈希的大小,實例如下:
實例
#!/usr/bin/perl %data = ( ' google ' => ' google.com ' , ' codercto ' => ' codercto.com ' , ' taobao ' => ' taobao.com ' ) ; @keys = keys %data ; $size = @keys ; print " 1 - 哈希大小: $size n " ; @values = values %data ; $size = @values ; print " 2 - 哈希大小: $size n " ;執行以上程序,輸出結果為:
1 - 哈希大小: 32 - 哈希大小: 3
哈希中新增或刪除元素
新增key/value 對可以透過簡單的賦值來完成。但是刪除哈希元素你需要使用delete函數:
實例
#!/usr/bin/perl %data = ( ' google ' => ' google.com ' , ' codercto ' => ' codercto.com ' , ' taobao ' => ' taobao.com ' ) ; @keys = keys %data ; $size = @keys ; print " 1 - 哈希大小: $size n " ; # 新增元素$data { ' facebook ' } = ' facebook.com ' ; @keys = keys %data ; $size = @keys ; print " 2 - 雜湊大小: $size n " ; # 刪除哈希中的元素delete $data { ' taobao ' } ; @keys = keys %data ; $size = @keys ; print " 3 - 哈希大小: $size n " ;執行以上程序,輸出結果為:
1 - 哈希大小: 32 - 哈希大小: 43 - 哈希大小: 3