免费注册 查看新帖 |

Chinaunix

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

@{} and %{} [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-09-15 00:34 |只看该作者 |倒序浏览
最近在看ref部分。

引用的赋值当然很easy。

但是反引用 在实际中就出现问题了。

我的问题主要集中在{}上。是不是{}在引用部分有这样的功能。

code1:
my @params = { state1 => 10, state2 => 28, state3=>12 };
print "===@params===\n";
print %{$params[0]},"\n";
/code

code2:
my @params = [1,2,3,4,5];
print "===@params===\n";
print @{$params[0]},"\n";
/code

上面两个例子中都是想把引用中的值取出来。第一个很好理解 因为是HASH 吗 所以用%{...}。按照这样的推理array 就应该用@[...]。但发现不对。所以想到了估计是{}的事情。但在GOOGLE上没搜到。最后我理解的是: 数据类型+{引用(地址)}  就能取出数据。 不知道对不对

因为没找到答案只是推测。所以拿了个小问题问大家。见笑了

论坛徽章:
0
2 [报告]
发表于 2008-09-15 10:29 |只看该作者

回复 #1 snss1983 的帖子

数据类型+{引用(地址)}  就能取出数据。

是这样的。

不过感觉你的代码好诡异,my @params = [1,2,3,4,5]; 写成 my @params = ([1,2,3,4,5]); 这样不是更好吗?

论坛徽章:
0
3 [报告]
发表于 2008-09-15 14:09 |只看该作者
{}在不同语境中有不同的意思
1.作为代码的分割
2.用来创建hash引用
3.用于反引用(deference)

而在引用方面,[]的作用就只是创建一个数组引用,并不能呢个用于反引用(deference)
同时反引用还可以使用->

论坛徽章:
0
4 [报告]
发表于 2008-09-15 15:13 |只看该作者
此处应该是用于反引用

论坛徽章:
3
戌狗
日期:2014-09-10 17:07:162015年辞旧岁徽章
日期:2015-03-03 16:54:15wusuopu
日期:2016-06-17 17:43:45
5 [报告]
发表于 2008-09-16 10:22 |只看该作者
第一个很好理解 因为是HASH 吗 所以用%{...}。按照这样的推理array 就应该用@[...]。但发现不对。所以想到了估计是{}的事情。但在GOOGLE上没搜到。最后我理解的是: 数据类型+{引用(地址)}  就能取出数据

@[...] 为啥不用来解引用?

[ 本帖最后由 ynchnluiti 于 2008-9-16 10:28 编辑 ]

论坛徽章:
0
6 [报告]
发表于 2008-09-16 11:20 |只看该作者
@[...] 为啥不用来解引用?
  

用来切片

论坛徽章:
0
7 [报告]
发表于 2008-09-17 21:46 |只看该作者
@snss1983

@{}中的{}就只是一个括号而已。
因为如果你不加 {} 而写成 %$params[0],perl会认为应该先 %$params 再取元素[0],
而不是先 $params[0] 再 %。
如果只是一个简单的变量如 $foo,那么解引用只需 %$foo 或 @$foo。
(当然 %{$foo} 也对)

@ynchnluiti

没有 @[] 这种用法。

@forlorngenius

当然你要说切片的那个@[]就另当别论了,跟这里讨论的是两码事。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP