我正在使用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做正确的事,但当然混淆我 in从长远来看。
更新:
我联系了Perltidy的作者Steve Hancock关于这个问题。从他的回答:
我检查过,问题是&在这被误解了 case作为函数调用sigil。基本问题是perltidy 看不到其他模块的原型,甚至是内置的,所以必须这样做 猜到什么时候会出现像“Fcntl :: S_IRUSR”这样的东西。其他 单词,它不知道这是函数调用还是常量,并且 不得不猜。当您颠倒顺序时,它消除了歧义 &。谢谢你的说明。我会看看能不能修补补丁 此
答案 0 :(得分:5)
肯定错误地认为
Fcntl::S_IRUSR & $mode
装置
Fcntl::S_IRUSR(&$mode)
您可以使用
来欺骗它(Fcntl::S_IRUSR) & $mode
或
Fcntl::S_IRUSR() & $mode