@{} and %{}

@{} and %{}

最近在看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上没搜到。最后我理解的是: 数据类型+{引用(地址)}  就能取出数据。 不知道对不对

因为没找到答案只是推测。所以拿了个小问题问大家。见笑了
数据类型+{引用(地址)}  就能取出数据。

是这样的。

不过感觉你的代码好诡异,my @params = [1,2,3,4,5]; 写成 my @params = ([1,2,3,4,5]); 这样不是更好吗?
{}在不同语境中有不同的意思
1.作为代码的分割
2.用来创建hash引用
3.用于反引用(deference)

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


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

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

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

用来切片
@snss1983

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

@ynchnluiti

没有 @[] 这种用法。

@forlorngenius

当然你要说切片的那个@[]就另当别论了,跟这里讨论的是两码事。