Hashes
散列是一组key/value对。 哈希变量前面有百分号(%)符号。 要引用散列的单个元素,您将使用前面带有“$”符号的哈希变量名称,后跟与大括号中的值相关联的“键”。
这是一个使用哈希变量的简单示例 -
#!/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
检查是否存在
如果您尝试从不存在的哈希中访问键/值对,则通常会获得undefined值,如果您已打开警告,则会在运行时生成警告。 你可以通过使用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 )部分只在给定条件为真时执行,否则将执行part。 因此,当我们执行上述程序时,它会产生以下结果,因为这里给定的条件exists($data{'Lisa'}返回true -
Lisa is 30 years old
获得哈希大小
您可以通过使用键或值上的标量上下文来获取大小(即散列中的元素数)。 简单地说首先你必须得到一个键或值的数组,然后你可以得到如下数组的大小 -
#!/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