有谁知道是什么解析或优先级决定导致警告“使用不带括号的“移位”是不明确的”为如下代码发出:
shift . 'some string';
# and not
(shift) . 'some string'; # or
shift() . 'some string';
这是有意使某些句法结构更容易吗?或者它仅仅是 perl 解析器工作方式的产物?
注意:这是一个关于语言设计的讨论,不是一个建议的地方
"@{[shift]}some string"
最佳答案
与 use diagnostics
,您会收到有用的消息:
警告:在 (eval
9)[/usr/lib/perl5/5.8/perl5db.pl:628]第2行(#1)
(S 模棱两可)你写了一个一元运算符,后面跟着一些东西
看起来像一个二元运算符,也可以被解释为
项或一元运算符。例如,如果你知道兰特
函数有一个默认参数 1.0,你写
兰特 + 5;
你可能认为你写的东西和
兰特() + 5;
但实际上,你得到了
兰特(+5);
因此,请在括号中说明您的真正意思。
可怕的是你可以写一些类似 shift .5
的东西它将被解析为 shift(0.5)
.
关于perl - 为什么 'Use of "shift"没有括号是由 Perl 发出的不明确的警告?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1583869/