#perl #perl-tidy
Вопрос:
Предположим, у меня есть какой-то код Perl, который выглядит следующим образом
use Data::Dump q[pp];
sub something{
return 2 2;
}
Я хочу, чтобы он был отформатирован perltidy как
use Data::Dump q[pp];
sub something{
return 2 2;
}
То есть все начальные пробелы удалены, а все строки выровнены по левому краю, но затем применяются правила отступа. Я пробовал -dws
, но это не сработало, и ни один из других вариантов, похоже, ничего не дает. Возможно ли это?
Комментарии:
1. Всегда можно удалить начальные пробелы в качестве отдельного шага…
perl -pe 's/^s //' foo.pl | perltidy > foo_pretty.pl
2. Но это вывод perltidy, который я получаю (за исключением пустой строки между
use
и подпрограммой)…3. @Shawn и в вашем вводе есть пробелы перед всеми строками? Если да, то какие
perltidy
настройки вы используете?4. То же самое и здесь, если все строки имеют некоторый отступ, то
perltidy
это не касается этого. Но он делает свое дело, кроме этого; я так понимаю, что у него нет оснований касаться общего отступа. Я пролистал его справочную страницу и не нашел для этого никаких вариантов. Однако, если какая-либо одна строка имеет 0 отступов (например, линия shebang), то она корректирует общий отступ. Итак … может быть, просто добавьте одну (1) строку? Например, комментарий, отметка времени, что угодно.5. Нет, никаких ведущих пробелов, кроме отступа в теле подлодки. Никаких вариантов вообще или просто
-dws
. (Однако файл шаблона perl, в который я копирую и вставляю, имеет проблемы.)
Ответ №1:
Как показано, это невозможно.
Некоторые дополнительные эксперименты показывают, что до тех пор, пока есть хотя бы одна строка (которая может содержать практически все), в которой отступ меньше четырех пробелов в начале файла, perltidy будет отступать, как и ожидалось в исходном вопросе.
Решение для этого конкретного примера состоит в том, чтобы включить этапы предварительной обработки в файл Makefile, который просто удаляет все пустые строки и оставленные пробелы перед запуском perltidy. Это решает проблему.
sed -i -e 's/^[ t]*//' file.pl
sed -i -e '/./!d' file.pl
perltidy file.pl