Правильное форматирование переключателя perl в emacs
-
08-07-2019 - |
Вопрос
Редактировать: Прочитав ответы, я полагаю, что ответ "не делай этого", поэтому я пометил соответствующий ответ как официальный.
Есть ли простой способ заставить emacs отображать операторы переключения perl, такие как perldoc.perl.org 's переключить страницу?
Вот форматирование на perldoc.perl.org:
use Switch;
switch ($val) {
case 1 { print "number 1" }
case "a" { print "string a" }
case [1..10,42] { print "number in list" }
case (\@array) { print "number in list" }
case /\w+/ { print "pattern" }
case qr/\w+/ { print "pattern" }
case (\%hash) { print "entry in hash" }
case (\&sub) { print "arg to subroutine" }
else { print "previous case not true" }
}
Вот форматирование в cperl-mode
после M-x indent-region
выполняется на фрагменте:
use Switch;
switch ($val) {
case 1 { print "number 1" }
case "a" { print "string a" }
case [1..10,42] { print "number in list" }
case (\@array) { print "number in list" }
case /\w+/ { print "pattern" }
case qr/\w+/ { print "pattern" }
case (\%hash) { print "entry in hash" }
case (\&sub) { print "arg to subroutine" }
else { print "previous case not true" }
}
У меня возникает необъяснимое желание придерживаться конструкций if-elsif...
ps.Я думаю, что это описывает желаемый процесс, но, похоже, для его разбора потребуется некоторое время.
Решение
Извините, я не могу помочь вам с emacs.Тем не менее, я порекомендую вам придерживаться
if ( condition ) {
}
elsif( other_condition ) {
}
else {
}
вместо того, чтобы использовать страшные Switch.pm
.Видишь Послание Николаса Кларка perl5.носильщики:
Switch будет удален из дистрибутива Perl core в следующем крупном выпуске.
Подробнее о ПерлМонки.
Как указывает Рэндал Шварц в комментарии ниже, начиная с версии 5.10 Perl обладает мощным замена это не зависит от фильтров источника:
use feature "switch";
given($_) {
when (/^abc/) { $abc = 1; }
when (/^def/) { $def = 1; }
when (/^xyz/) { $xyz = 1; }
default { $nothing = 1; }
}
Другие советы
Рассматривали ли вы возможность использования диспетчерской таблицы, как описывает Марк Джейсон Доминус в Perl более высокого порядка?
Если cperl неправильно форматирует его, попробуйте perltidy.
Вот удобная функция для запуска perltidy в Emacs в текущем регионе:
;; Slick functions to run perltidy in place (defun perltidy-region () "Run perltidy on the current region." (interactive) (save-excursion (shell-command-on-region (point) (mark) "perltidy -q" nil t)))