Perl 对子例程返回的列表进行索引-语法

Perl 对子例程返回的列表进行索引-语法,perl,syntax,Perl,Syntax,鉴于我有以下错误代码: my $this_is_easier = caller(0)[0]; 为什么我需要执行以下操作才能编译 my $this_is_easier = (caller(0))[0]; 这只是Perl解析器的细微差别吗?在其他语言中,如Python和C++,假设函数将返回可索引的东西。< P>当代码> []/COD>跟随另一个索引时,它意味着引用引用。 $foo[...][...] means $foo[...]->[...] $foo[...](...)

鉴于我有以下错误代码:

my $this_is_easier = caller(0)[0];
为什么我需要执行以下操作才能编译

my $this_is_easier = (caller(0))[0];

这只是Perl解析器的细微差别吗?在其他语言中,如Python和C++,假设函数将返回可索引的东西。

< P>当代码> []/COD>跟随另一个索引时,它意味着引用引用。
$foo[...][...]   means   $foo[...]->[...]
$foo[...](...)   means   $foo[...]->(...)
()
跟随另一个索引时,它意味着取消引用

$foo[...][...]   means   $foo[...]->[...]
$foo[...](...)   means   $foo[...]->(...)
因此,人们的期望是非常合理的

foo(...)[...]
意指

foo(...)->[...]
而不是

( foo(...) )[0]

期望值的差异可能是它不受支持的原因。

更简单:
my($this\u is\u更简单)=调用方(0)
我知道这更简单,但我是从语法方面问的。最初的用法是说caller(0)[0],但是foo(…)[…]实际工作吗?当我在foo返回引用的情况下运行它时,它仍然是一个语法错误?你为什么问它是否有效?你的问题是为什么它不起作用,我解释了为什么它不起作用。很抱歉给你带来困惑。我以为你暗示foo(…)[…]应该解释为foo(…)->[…]。我没有完全理解你的最后一句话,是的。它的意思应该是
foo(…)->[…]
。它还应该表示
(foo(…)[…])
。这就是问题所在。