我正在使用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