- 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