Убедить Перлтиди оставить одни пробелы

Я использую Perltidy, чтобы переформатировать несколько моих старых файлов Perl в стиль, который ближе к моим текущим предпочтениям. Я столкнулся с проблемой с этим фрагментом:

Fcntl::S_IRUSR & $mode

Перлтиди настаивает на удалении места после & токен, в результате чего получается:

Fcntl::S_IRUSR &$mode

... который, на мой взгляд, является бельмом на глазу. Что я могу сделать, чтобы убедить Перлтиди оставить это место в покое? Я даже попробовал -fws вариант безрезультатный.

Я использую Perltidy 20101217, который, очевидно, является последней версией.

РЕДАКТИРОВАТЬ:

Несколько дополнительных наблюдений:

  • С использованием --indent-only (-io) опция не удаляет вышеупомянутое пространство.

  • Следующий эквивалентный фрагмент не подвержен этой проблеме:

    $mode & Fcntl::S_IRUSR
    

РЕДАКТИРОВАТЬ 2:

Я закончил тем, что изменил порядок & аргументы оператора, так как это, кажется, пока работает с проблемой Perltidy. Кроме того, этот подход не требует добавления дополнительных скобок или каких-либо других токенов, которые могли бы помочь Perltidy делать правильные вещи, но, безусловно, смутили бы меня в долгосрочной перспективе.

ОБНОВИТЬ:

Я связался со Стивом Хэнкоком, автором Perltidy, по этому вопросу. Из его ответа:

Я проверил, и проблема в том, что & в этом случае ошибочно принимают за сигил вызова функции. Основная проблема заключается в том, что perltidy не видит прототипы для других модулей, даже встроенных, поэтому он должен догадываться, когда речь заходит о чем-то вроде "Fcntl::S_IRUSR". Другими словами, он не знает, является ли это вызовом функции или константой, и должен угадать. Когда вы изменили порядок, он убрал неоднозначность в &.

Спасибо за примечание. Я посмотрю, смогу ли я придумать патч, чтобы это исправить.

1 ответ

Решение

Это наверняка неправильно думает

Fcntl::S_IRUSR & $mode

средства

Fcntl::S_IRUSR(&$mode)

Вы, вероятно, можете обмануть это, используя

(Fcntl::S_IRUSR) & $mode

или же

Fcntl::S_IRUSR() & $mode
Другие вопросы по тегам