免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 6400 | 回复: 2
打印 上一主题 下一主题

[求助] 以下多重hash的引用用法如何理解 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-08-14 10:59 |只看该作者 |倒序浏览
本帖最后由 westeast 于 2013-08-14 11:02 编辑

如下代码:
%joetest = (
key1 => value1,
key2 => {key21=>value21,
         key22=>value22},
);

print "1: $joetest{key1}\n";

print "2: $joetest{key2}\n";
# below  line treat $joetest{key2} as a reference to a anynormous hash
print "3: $joetest{key2}->{key21}\n";
#below line is try to get the value by the key: key21 in hash %{$joetest{key2}}
print "4: ${$joetest{key2}}{key21}\n";



我知道多重hash,其实质是将外层hash的value(标量)是对内层hash的引用。
并且在引用时,perl会自动创建一个匿名的hash。
那么我的问题是如何理解下面这种方法? 这种用法同样给出和前面3,4两种用法一样的值。它是3的简化还是4的简化, 或者是其他的用法?
看起来像存在hash, %joetest{key2}, 但print一下就知道会报错, 实际上只存在那个匿名的hash为  %$joetest{key2},

print "5: $joetest{key2}{key21}\n";

论坛徽章:
1
双子座
日期:2013-11-06 17:18:01
2 [报告]
发表于 2013-08-14 11:27 |只看该作者
-> 的其中一种用法是“解引用”
print "4: ${$joetest{key2}}{key21}\n";   ##这是种最“本份”的用法,但写法比较笨重
print "3: $joetest{key2}->{key21}\n";     ##于是创建了这种“简洁”的写法。  

箭头符号规则
在两个下标之间的箭头是可选的。

@a = ( [1, 2, 3],
               [4, 5, 6],
               [7, 8, 9]
             );

$a[1] = [4,5,6];
$a[1]->[0]    ------->4
## 我们可以用 $a[1][0]来代替 $a[1]->[0]
${$a[1]}[0] -------> 4


类似的
print "5: $joetest{key2}{key21}\n";

论坛徽章:
0
3 [报告]
发表于 2013-08-14 12:35 |只看该作者
回复 2# seufy88


    谢谢回复,不过这里的规则中的下标也可以指hash的key?
你举的是数组的例子, 对hash引用同样适用?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP