|
哈希是一种数据结构,是key/value对的集合,通过两种方法来说明hash表的用法。
第一种是国家和首都和关系来说明其用法。
my %capitals = (
"China" => "Beijing",
"America" => "Washington",
"Germany" => "Berlin",
"France" => "Paris"
);
1,遍历操作:
while ((my $key, my $value) = each %capitals) {
print "$key => $value\n";
}
foreach my $key (keys %capitals) {
print "$key => $capitals{$key}\n";
}
2,排序遍历:
foreach my $key (sort keys %capitals) {
print "$key => $capitals{$key}\n";
}
3,添加操作:
if ( !exists $capitals{"Australia"} ) {
print "there is no Australia, so adding it\n";
$capitals{"Australia"} = "Sydney";
}
4,删除操作:
delete $capitals{"America"};
第二种通过国家和城市来说明其用法,由于每个国家对应一个城市列表,而hash表的键值需要必须是标量,只有通过引用来解决这个问题:
引用就是指向一个完整列表或完整哈希(或指向其他的东西,比如函数)的标量值,引用的具体用法。
1,在数组,hash表或者普通变量前面加个斜线“\”就能得到这个变量的引用:
my @china_contries = ("beijing", "nanjing", "tianjing");
my $href = \@china_contries;
2,匿名引用分为匿名数组引用和匿名hash表引用:
my $href = ["beijing", "nanjing", "tianjing"];
my $seasons = [
["Jan.", "Feb.", "Mar."],
["Apr.", "May.", "Jun."],
["Jul.", "Aug. ", "Sep."],
["Oct.", "Nov.", "Dec."]
];
my $captals = {"China" => "beijing", "Australia" => "Sydney", "America" => "Washington"};
3,各种变量的引用有如下几种使用方法:
1,与普通变量的访问方法相比,假设原来的变量名是name,则此方法在所有name出现的地方用$name代替:
foreach my $key (keys %$capitals) {
print "key:$key, value:$$capitals{$key}\n";
}
2,与普通变量的访问方法相比,假设变量原来的名字是name,则现在用{$name}来代替name:
print %{$capitals}, "\n";
3,使用箭头符号->,该方法不适用于标量:
print $captials->{"China"}, "\n";
print $seasons->[0][0], "\n";
具体形式:
数组:$aref->[]
哈希:$href->{}
子过程:$href->()
4,引用的赋值:
$aref2 = $aref1; 将使得$aref2和$aref1指向同一个数组,如果想将$aref1指向的数组拷贝一份给$aref2的话,使用下面的方法,[]里面对数组进行解引用,而[]以解引用后的数 组为内容生成了一个新的匿名数组,又赋值给$aref2。
$aref2 = [@{$aref1}];
注意:不能使用下面的形式,外层的[]是不可缺少的。由于=左边是标量,所以右边的数组会被解释为标量环境,得到的是数组元素个数,而不是元素本身。但是如果加上[]就可以 了,这样perl知道这是一个匿名数组的赋值。
$aref2 = @{$aref1}; |
|
|