我有代码:
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)
然后警告消失.为什么会这样?
@$args{"ARRAY"}相当于@{$args}{"ARRAY"},而不是@{$args{"ARRAY"}}.从perlref"使用参考"部分:
由于能够在简单的情况下省略curlies
$$x,人们常常会错误地将解除引用符号视为正确的操作符,并且想知道它们的优先级.但是,如果它们是,您可以使用括号而不是括号.事实并非如此.考虑下面的差异; case 0是案例1的简写版本,而不是案例2:Run Code Online (Sandbox Code Playgroud)$$hashref{"KEY"} = "VALUE"; # CASE 0 ${$hashref}{"KEY"} = "VALUE"; # CASE 1 ${$hashref{"KEY"}} = "VALUE"; # CASE 2 ${$hashref->{"KEY"}} = "VALUE"; # CASE 3