在这种情况下,花括号在 Perl 中的作用是什么?

What is the role of the curly brace in this case in Perl?

以下 print 语句在访问数组引用的第一个元素时有效

my $aref = [6, 7, 8];
print $aref->[0];
print $$aref[0];
print ${$aref}[0];

第 3 次打印中 allowing/using 花括号的原因是什么?它是有意为之还是偶然起作用?

原因是大括号内的表达式可以任意复杂。想象一下,例如,您有一个对象,该对象的方法返回数组引用列表 - 并且您想要使用该列表中的第二个引用。然后你可以使用下面的代码:

print ${ ($obj->array_generator)[1] }[0];

在大括号内,您可以使用任何 returns 数组引用的表达式。只有在简单的情况下(表达式是一个简单的标量变量)才可以省略大括号。

当然,使用这种语法在引用数组中查找元素很少是个好主意 - 我总是建议改用箭头语法。

print +($obj->array_generator)[1]->[0];

更新: 我最初忘记提及的事情 - 表达式必须用大括号括起来,因为它是 returns 数组引用的代码块。它不必是单个表达式。您可以(但可能不应该!)编写如下代码:

print ${
  my @arefs = $object->array_generator;
  my $aref = $arefs[1];
  $aref;
}[0];

$BLOCK[EXPR]get_ref()->[0].

之前允许 ${ get_ref() }[0]

我认为(首选)箭头符号语法 ($EXPR->[EXPR]) 比内联语法更新。数组元素取消引用的内联语法如下:

$BLOCK[EXPR]

这允许

${ get_ref() }[0]   # And even more complex blocks, including one with multiple statements.

不过,为了方便起见,

${ $ref }[EXPR]     # BLOCK contains a simple scalar

可以缩短为

$$ref[EXPR]

Dereferencing Syntax