我正在使用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”之类的东西。换句话说,它不知道这是一个函数调用还是一个常量,并且必须猜测。当您颠倒顺序时,它消除了 & 上的歧义。
感谢您的注意。我会看看我能不能想出一个补丁来解决这个问题。