Вопрос

Редактировать: Прочитав ответы, я полагаю, что ответ "не делай этого", поэтому я пометил соответствующий ответ как официальный.

Есть ли простой способ заставить 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)))
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top