Perl中的@ {$ list_ref}和@ $ list_ref是否相同?

Fra*_*ger 5 perl dereference

我是新来的Perl和很好奇是否@{$list_ref}@$list_ref是完全等价的.

它们似乎是可以互换的,但我很紧张,有一些微妙的事情可能会让我失踪.

Gre*_*con 10

是的,他们是等同的.当表达式不仅仅是一个简单的标量变量时,你需要括号,例如,

push @{ $foo{$bar} } => "baz";
Run Code Online (Sandbox Code Playgroud)

有关更多详细信息,请参阅参考文档的" 使用参考"部分.标准的Perl文档还包括几个使用引用的教程:


con*_*r42 6

我一直觉得有必要记住外括号不是语法魔法,它们只是一个返回引用的块.块内的表达式可以是返回引用的任何内容:

$ perl -le 'sub foo {[qw/ apple orange banana /]} print ${print "Do something here."; foo()} [1]'
Do something here.
orange
Run Code Online (Sandbox Code Playgroud)