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

tex*_*uce 5 perl

我有代码:

push @$args{"ARRAY"}, "value";
Run Code Online (Sandbox Code Playgroud)

这给出了警告说:

push on reference is experimental at ...
Run Code Online (Sandbox Code Playgroud)

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

push @{args{"ARRAY"}}, "value";
Run Code Online (Sandbox Code Playgroud)

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

Sla*_*ade 8

@$args{"ARRAY"}相当于@{$args}{"ARRAY"},而不是@{$args{"ARRAY"}}.从perlref"使用参考"部分:

由于能够在简单的情况下省略curlies $$x,人们常常会错误地将解除引用符号视为正确的操作符,并且想知道它们的优先级.但是,如果它们是,您可以使用括号而不是括号.事实并非如此.考虑下面的差异; case 0是案例1的简写版本,而不是案例2:

   $$hashref{"KEY"}   = "VALUE";       # CASE 0
   ${$hashref}{"KEY"} = "VALUE";       # CASE 1
   ${$hashref{"KEY"}} = "VALUE";       # CASE 2
   ${$hashref->{"KEY"}} = "VALUE";     # CASE 3
Run Code Online (Sandbox Code Playgroud)