Убедить Перлтиди оставить одни пробелы
Я использую 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