
- Perl 基礎
- Perl - 首頁
- Perl - 簡介
- Perl - 環境
- Perl - 語法概述
- Perl - 資料型別
- Perl - 變數
- Perl - 標量
- Perl - 陣列
- Perl - 雜湊表
- Perl - IF...ELSE
- Perl - 迴圈
- Perl - 運算子
- Perl - 日期和時間
- Perl - 子程式
- Perl - 引用
- Perl - 格式
- Perl - 檔案I/O
- Perl - 目錄
- Perl - 錯誤處理
- Perl - 特殊變數
- Perl - 編碼規範
- Perl - 正則表示式
- Perl - 傳送郵件
- Perl 高階
- Perl - 套接字程式設計
- Perl - 面向物件
- Perl - 資料庫訪問
- Perl - CGI 程式設計
- Perl - 包和模組
- Perl - 程序管理
- Perl - 嵌入式文件
- Perl - 函式引用
- Perl 有用資源
- Perl - 問答
- Perl - 快速指南
- Perl - 有用資源
- Perl - 討論
Perl - 雜湊表
雜湊表是一組鍵/值對。雜湊變數以百分號 (%) 開頭。要引用雜湊表的單個元素,可以使用雜湊變數名稱(以“$”符號開頭),後跟用花括號括起來的“鍵”。
這是一個使用雜湊變數的簡單示例:
#!/usr/bin/perl %data = ('John Paul', 45, 'Lisa', 30, 'Kumar', 40); print "\$data{'John Paul'} = $data{'John Paul'}\n"; print "\$data{'Lisa'} = $data{'Lisa'}\n"; print "\$data{'Kumar'} = $data{'Kumar'}\n";
這將產生以下結果:
$data{'John Paul'} = 45 $data{'Lisa'} = 30 $data{'Kumar'} = 40
建立雜湊表
雜湊表可以透過以下兩種方式之一建立。在第一種方法中,您可以逐一為命名鍵賦值:
$data{'John Paul'} = 45; $data{'Lisa'} = 30; $data{'Kumar'} = 40;
在第二種方法中,您可以使用列表,該列表透過從列表中獲取單個對進行轉換:對的第一個元素用作鍵,第二個元素用作值。例如:
%data = ('John Paul', 45, 'Lisa', 30, 'Kumar', 40);
為了清晰起見,您可以使用 => 作為 , 的別名,以指示鍵/值對,如下所示:
%data = ('John Paul' => 45, 'Lisa' => 30, 'Kumar' => 40);
這是上述形式的另一種變體,請檢視一下,這裡所有鍵都以連字元 (-) 開頭,並且鍵周圍不需要引號:
%data = (-JohnPaul => 45, -Lisa => 30, -Kumar => 40);
但需要注意的是,這種雜湊表建立方式中只使用單個單詞(即無空格的鍵),如果您以此方式構建雜湊表,則只能使用連字元訪問鍵,如下所示。
$val = %data{-JohnPaul} $val = %data{-Lisa}
訪問雜湊表元素
訪問雜湊表中的單個元素時,必須在變數前加上美元符號 ($) ,然後在變數名稱後附加用花括號括起來的元素鍵。例如:
#!/usr/bin/perl %data = ('John Paul' => 45, 'Lisa' => 30, 'Kumar' => 40); print "$data{'John Paul'}\n"; print "$data{'Lisa'}\n"; print "$data{'Kumar'}\n";
這將產生以下結果:
45 30 40
提取切片
您可以像從陣列中提取切片一樣提取雜湊表的切片。您需要使用 @ 字首來儲存返回值的變數,因為它們將是值的列表:
#!/uer/bin/perl %data = (-JohnPaul => 45, -Lisa => 30, -Kumar => 40); @array = @data{-JohnPaul, -Lisa}; print "Array : @array\n";
這將產生以下結果:
Array : 45 30
提取鍵和值
您可以使用keys函式獲取雜湊表中所有鍵的列表,該函式具有以下語法:
keys %HASH
此函式返回命名雜湊表所有鍵的陣列。以下是一個示例:
#!/usr/bin/perl %data = ('John Paul' => 45, 'Lisa' => 30, 'Kumar' => 40); @names = keys %data; print "$names[0]\n"; print "$names[1]\n"; print "$names[2]\n";
這將產生以下結果:
Lisa John Paul Kumar
同樣,您可以使用values函式獲取所有值的列表。此函式具有以下語法:
values %HASH
此函式返回一個包含命名雜湊表所有值的普通陣列。以下是一個示例:
#!/usr/bin/perl %data = ('John Paul' => 45, 'Lisa' => 30, 'Kumar' => 40); @ages = values %data; print "$ages[0]\n"; print "$ages[1]\n"; print "$ages[2]\n";
這將產生以下結果:
30 45 40
檢查是否存在
如果您嘗試從不存在的雜湊表中訪問鍵/值對,通常會獲得未定義的值,如果您啟用了警告,則會在執行時生成警告。您可以使用exists函式來解決這個問題,如果命名鍵存在,則該函式返回 true,無論其值是什麼:
#!/usr/bin/perl %data = ('John Paul' => 45, 'Lisa' => 30, 'Kumar' => 40); if( exists($data{'Lisa'} ) ) { print "Lisa is $data{'Lisa'} years old\n"; } else { print "I don't know age of Lisa\n"; }
這裡我們介紹了 IF...ELSE 語句,我們將在單獨的章節中學習它。現在,您只需假設只有當給定條件為真時才會執行if( condition )部分,否則將執行else部分。因此,當我們執行上述程式時,它會產生以下結果,因為這裡給定的條件 exists($data{'Lisa'} 返回 true:
Lisa is 30 years old
獲取雜湊表大小
您可以使用標量上下文對 keys 或 values 獲取雜湊表的大小(即元素的數量)。簡單地說,首先您必須獲取 keys 或 values 的陣列,然後您可以按如下方式獲取陣列的大小:
#!/usr/bin/perl %data = ('John Paul' => 45, 'Lisa' => 30, 'Kumar' => 40); @keys = keys %data; $size = @keys; print "1 - Hash size: is $size\n"; @values = values %data; $size = @values; print "2 - Hash size: is $size\n";
這將產生以下結果:
1 - Hash size: is 3 2 - Hash size: is 3
在雜湊表中新增和刪除元素
使用簡單的賦值運算子,一行程式碼即可新增新的鍵/值對。但是,要從雜湊表中刪除元素,需要使用delete函式,如下例所示:
#!/usr/bin/perl %data = ('John Paul' => 45, 'Lisa' => 30, 'Kumar' => 40); @keys = keys %data; $size = @keys; print "1 - Hash size: is $size\n"; # adding an element to the hash; $data{'Ali'} = 55; @keys = keys %data; $size = @keys; print "2 - Hash size: is $size\n"; # delete the same element from the hash; delete $data{'Ali'}; @keys = keys %data; $size = @keys; print "3 - Hash size: is $size\n";
這將產生以下結果:
1 - Hash size: is 3 2 - Hash size: is 4 3 - Hash size: is 3