在 Perl 中,如果我有:
no strict;
@ARY = (58, 90);
要对数组的一个元素进行操作,比如说第二个,我会写(可能作为更大表达式的一部分):
$ARY[1] # The most common way found in Perldoc's idioms.
虽然,出于某种原因,这些也有效:
@ARY[1]
@{ARY[1]}
导致所有在同一个对象中:
print (\$ARY[1]);
print (\@ARY[1]);
print (\@{ARY[1]});
输出:
SCALAR(0x9dbcdc)
SCALAR(0x9dbcdc)
SCALAR(0x9dbcdc)
启用这种结构的语法规则是什么?使用这些结构中的每一个,或者混合所有这些结构,设计出可靠的程序代码能走多远?这些表达的互换性如何?(总是在非严格的上下文中说话)。
关于证明我如何进入这个问题的理由,我同意“使用严格”作为一种更好的做法,但我仍然对建立非严格表达式的一些知识感兴趣。
在试图为自己的这种不安找到一些帮助时,我想到了:
- “不严格”的概念;不要抱怨未声明的变量和怪异的语法。
- 前缀取消引用具有比子索引 [] 更高的优先级(perldsc §“优先级警告”)。
- 关于何时使用 @ 而不是 $ 的说明(perldata § "Slices")。
- Perl 的运算符 (perlop) 中缺少“[]”(数组下标/切片)描述,这让我认为它不是运算符……(但它必须是别的东西。但是,什么?)。
对于我所学到的,这些提示都没有让我更好地理解我的问题。
提前致谢。