推入解除引用的数组会发出警告

时间:2015-03-22 04:03:11

标签: perl

我有代码:

push @$args{"ARRAY"}, "value";

这会发出警告:

push on reference is experimental at ...

如果我只是在数组周围使用块:

push @{args{"ARRAY"}}, "value";

然后警告消失。为什么会这样?

1 个答案:

答案 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