perl hash问题

1#!/bin/usr/perl-w2usestrict;34my%hash;5$hash{1}->{1}=0;6$hash{1}->{2}=0;7$hash{1}->{... 1 #!/bin/usr/perl -w
2 use strict;
3
4 my %hash;
5 $hash{1}->{1}=0;
6 $hash{1}->{2}=0;
7 $hash{1}->{3}=0;
8
9 for my $key (keys %{$hash{1}}){
10 print "$key\n";
11 }
12
为什么结果是1 2 3,
3怎么没有把1.2覆盖掉呢?hash不是一一对应码?
hash{1}相当于key,怎么能指向3个value hash。
展开
 我来答
lutaoact
2012-11-14
知道答主
回答量:20
采纳率:0%
帮助的人:14.5万
展开全部
你所定义的%hash是一个值为哈希引用的哈希。

%hash的key为1,而值为{1 => 0, 2 => 0, 3 => 0}。这个花括号很重要,它表示这是一个匿名哈希,所以$hash{1}的值其实就是{1 => 0, 2 => 0, 3 => 0},对于哈希引用来说,%{}是用来解引用的,也就是得到了一个(1 => 0, 2 => 0, 3 => 0)哈希,注意这里是圆括号。所以你调用keys函数的时候,返回的是(1,2,3)这个列表,打印出来的时候自然就是1,2,3了。
这里面有一些perl的数据结构的知识,总之,在perl里面,引用是个非常强大的东西,[],{}是用来生成匿名数组和哈希的,并返回它们的引用,而@[], %{}是用来解引用,得到里面的数据。可以用来构建复杂的数据结构,你可以去看看《perl技术内幕》,在这部分讲得不错。
my %hash = (
'1' => {
'1' => '0',
'2' => '0',
'3' => '0',
}
);
lreper
2012-11-14 · TA获得超过412个赞
知道小有建树答主
回答量:243
采纳率:100%
帮助的人:285万
展开全部
这个其实数据结构是这样的
my %hash = (
'1' => {
'1' => '0',
'2' => '0',
'3' => '0',

}

);

%hash 是一个哈希,$hash{1} 是hash中key为1时的value,而这个value是一个匿名哈希的引用
所以%{$hash{1}} 是相当于那个匿名hash ,在这个匿名哈希中有3个key1,2,3,打印出来当然是3个了。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式