perl - 为什么 'Use of "shift"没有括号是由 Perl 发出的不明确的警告?

标签 perl syntax warnings

有谁知道是什么解析或优先级决定导致警告“使用不带括号的“移位”是不明确的”为如下代码发出:

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/

相关文章:

perl - Perl 中的 Kevin Bacon 六度

Scala 下划线用于简化函数字面量的语法

java - 为什么要为 HttpHead 方法取回 cookie?

perl - 为什么 perldoc 将 'Münster' 评估为 'Muenster'

perl + nginx 再次出现403错误

MongoDB 语法错误意外 token

javascript - 有什么方法可以使 javascript 中的嵌套回调代码更具可读性吗?

warnings - 高 CPU mod_fcgid : can't apply process slot

objective-c - 为什么 gcc 会警告派生类中的 `self = [super initDesignatedInit];' 调用不兼容的结构赋值?

python - 如何在 WordNet 中找到两个同义词集之间的语义关系