说服Perltidy独自留下空白

时间:2011-11-01 23:01:22

标签: perl perl-tidy

我正在使用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”这样的东西。其他   单词,它不知道这是函数调用还是常量,并且   不得不猜。当您颠倒顺序时,它消除了歧义   &。

     

谢谢你的说明。我会看看能不能修补补丁   此

1 个答案:

答案 0 :(得分:5)

肯定错误地认为

Fcntl::S_IRUSR & $mode

装置

Fcntl::S_IRUSR(&$mode)

您可以使用

来欺骗它
(Fcntl::S_IRUSR) & $mode

Fcntl::S_IRUSR() & $mode