散列是一组键/值对.哈希变量前面有百分号(%)符号.要引用散列的单个元素,您将使用前面带有"$"符号的哈希变量名称,后跟与大括号中的值相关联的"键".
这是一个使用哈希变量的简单示例;
#!/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";
这将产生以下结果 :
453040
提取切片
您可以尽可能地提取哈希切片从数组中提取切片.你需要使用@变量的前缀用于存储返回值,因为它们是值列表 :
#!/uer/bin/perl%data = (-JohnPaul => 45, -Lisa => 30, -Kumar => 40);@array = @data{-JohnPaul, -Lisa};print "Array : @array\n";
这将产生以下结果 :
Array : 45 30
提取键和值
您可以使用
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";
这将产生以下结果 :
LisaJohn PaulKumar
同样,您可以使用 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";
这将产生以下结果 :
304540
检查是否存在
如果您尝试访问键/值对从不存在的哈希值中,您通常会得到未定义的值,如果您打开了警告,那么您将在运行时收到警告.您可以使用 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 部分将被执行.因此,当我们执行上述程序时,它会产生以下结果,因为这里给定的条件存在($ data {'Lisa'} 返回true :
Lisa is 30 years old
获取哈希大小
你可以得到size - 也就是说,通过在键或值上使用标量上下文来表示哈希中的元素数.首先,您必须获得键或值的数组,然后您可以获得数组的大小,如下所示;
#!/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 32 - Hash size: is 3
在哈希中添加和删除元素
使用简单赋值运算符可以使用一行代码添加新的键/值对.但要从哈希中删除元素,您需要使用删除函数,如下例所示 :
#!/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 32 - Hash size: is 43 - Hash size: is 3