说服Perltidy独自留下空白

thk*_*ala 4 perl perl-tidy

我正在使用Perltidy将我的一些旧的Perl文件重新格式化为更接近我当前偏好的样式.我遇到了这个代码段的问题:

Fcntl::S_IRUSR & $mode
Run Code Online (Sandbox Code Playgroud)

Perltidy 坚持&令牌后删除空格,导致这样:

Fcntl::S_IRUSR &$mode
Run Code Online (Sandbox Code Playgroud)

......在我看来,这是一个眼睛.我能做些什么来说服Perltidy单独留下那个单独的空间?我甚至试过这个-fws选项无济于事.

我使用的是Perltidy 20101217,这显然是最新版本.

编辑:

一些额外的意见:

编辑2:

我最终颠倒了&运算符参数的顺序,因为这似乎暂时解决了Perltidy问题.此外,这种方法不需要添加额外的括号或任何其他可能有助于Perltidy做正确事情的令牌,但从长远来看肯定会让我感到困惑.

更新:

我联系了Perltidy的作者Steve Hancock关于这个问题.从他的回应:

我检查过,问题是&在这种情况下被错误地称为函数调用sigil.基本问题是perltidy看不到其他模块的原型,甚至内置,所以它必须猜测什么时候会出现像"Fcntl :: S_IRUSR"这样的东西.换句话说,它不知道这是函数调用还是常量,并且必须猜测.当您颠倒顺序时,它消除了&的模糊性.

谢谢你的说明.我会看看我是否可以提出补丁来解决这个问题.

ike*_*ami 5

它肯定错误地认为

Fcntl::S_IRUSR & $mode
Run Code Online (Sandbox Code Playgroud)

手段

Fcntl::S_IRUSR(&$mode)
Run Code Online (Sandbox Code Playgroud)

您可以通过使用来欺骗它

(Fcntl::S_IRUSR) & $mode
Run Code Online (Sandbox Code Playgroud)

要么

Fcntl::S_IRUSR() & $mode
Run Code Online (Sandbox Code Playgroud)