4

我正在使用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。从他的回应中:

我检查了一下,问题是在这种情况下 & 被错误地标记为函数调用符号。基本问题是 perltidy 看不到其他模块的原型,即使是内置的,所以它必须猜测何时涉及“Fcntl::S_IRUSR”之类的东西。换句话说,它不知道这是一个函数调用还是一个常量,并且必须猜测。当您颠倒顺序时,它消除了 & 上的歧义。

感谢您的注意。我会看看我能不能想出一个补丁来解决这个问题。

4

1 回答 1

5

它肯定错误地认为

Fcntl::S_IRUSR & $mode

方法

Fcntl::S_IRUSR(&$mode)

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

(Fcntl::S_IRUSR) & $mode

或者

Fcntl::S_IRUSR() & $mode
于 2011-11-02T00:08:36.930 回答