我正在使用Perltidy将一些旧的Perl文件重新格式化为一种更接近于当前偏好的样式。我在此代码段中遇到了一个问题:

Fcntl::S_IRUSR & $mode


Perltidy坚持要删除&令牌后的空格,结果是:

Fcntl::S_IRUSR &$mode


...在我看来,这是令人讨厌的。我该如何说服Perltidy独自离开那一个空间?我什至尝试-fws选项都没有用。

我正在使用Perltidy 20101217,它显然是最新版本。

编辑:

其他一些观察:


使用--indent-only-io)选项不会删除上述空格。
以下等效代码段不受此问题影响:

$mode & Fcntl::S_IRUSR



编辑2:

我最终颠倒了&运算符参数的顺序,因为暂时似乎可以解决Perltidy问题。另外,这种方法不需要添加额外的括号或任何其他可能有助于Perltidy做正确事情的令牌,但从长远来看肯定会让我感到困惑。

更新:

关于此问题,我联系了Perltidy的作者Steve Hancock。从他的回应:


我检查了一下,问题是在这个&中被错误地标记了
案例作为函数调用标记。最基本的问题是
甚至看不到其他模块的原型,即使是内置的,因此必须
猜猜何时涉及到“ Fcntl :: S_IRUSR”之类的东西。其他
话说,它不知道这是函数调用还是常量,并且
必须猜测。当您颠倒顺序时,它消除了歧义
&。

感谢您的来信。我看看是否可以提出补丁来修复
这个。

最佳答案

它肯定错误地认为

Fcntl::S_IRUSR & $mode


手段

Fcntl::S_IRUSR(&$mode)


您可能可以通过使用它来欺骗

(Fcntl::S_IRUSR) & $mode


要么

Fcntl::S_IRUSR() & $mode

08-18 15:08