在这种情况下,花括号在 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]
以下 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]