我有代码:
push @$args{"ARRAY"}, "value";
这会发出警告:
push on reference is experimental at ...
如果我只是在数组周围使用块:
push @{args{"ARRAY"}}, "value";
然后警告消失。为什么会这样?
答案 0 :(得分:8)
@$args{"ARRAY"}
相当于@{$args}{"ARRAY"}
,而不是@{$args{"ARRAY"}}
。来自perlref
, section "Using References":
由于能够省略
$$x
的简单情况的curlies, 人们经常会错误地将解除引用符号视为 适当的操作员,并想知道他们的优先权。如果他们是, 但是,您可以使用括号而不是括号。那不是 案件。考虑下面的差异; case 0是一个简写版本 案例1,而不是案例2:$$hashref{"KEY"} = "VALUE"; # CASE 0 ${$hashref}{"KEY"} = "VALUE"; # CASE 1 ${$hashref{"KEY"}} = "VALUE"; # CASE 2 ${$hashref->{"KEY"}} = "VALUE"; # CASE 3