Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
emacs中正确的perl开关格式_Perl_Emacs_Indentation_Switch Statement - Fatal编程技术网

emacs中正确的perl开关格式

emacs中正确的perl开关格式,perl,emacs,indentation,switch-statement,Perl,Emacs,Indentation,Switch Statement,编辑:阅读回复后,我相信答案是“不要这样做”,因此我标记了一个适当的回复作为正式答案 有没有一种简单的方法让emacs显示perl开关语句,比如perldoc.perl.org 以下是perldoc.perl.org上的格式: use Switch; switch ($val) { case 1 { print "number 1" } case "a" { print "string a" } case [1..10,42] { pri

编辑:阅读回复后,我相信答案是“不要这样做”,因此我标记了一个适当的回复作为正式答案

有没有一种简单的方法让emacs显示perl开关语句,比如perldoc.perl.org

以下是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" }
}
以下是在代码段上运行
M-x缩进区域
cperl模式下的格式设置:

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" }
    }
我有一种莫名其妙的冲动要坚持如果埃尔西夫


另外,我认为描述了所需的过程,但似乎需要一些时间来解析。

很抱歉,我无法帮助您处理emacs。但是,我建议您坚持使用

if ( condition ) {

}
elsif( other_condition ) {

}
else {

}
不要使用可怕的
开关.pm
。见:

在下一个主要版本中,将从Perl core发行版中删除该开关

更多关于的讨论

正如Randal Schwartz在下面的评论中指出的,从5.10版开始,Perl有一个强大的、不依赖于源过滤器的功能:

use feature "switch";

given($_) {
   when (/^abc/) { $abc = 1; }
   when (/^def/) { $def = 1; }
   when (/^xyz/) { $xyz = 1; }
   default { $nothing = 1; }
}

您是否考虑过使用分派表,如Mark Jason Dominus在

中概述的那样。如果cperl没有正确格式化分派表,请尝试perltidy

下面是一个在当前区域的Emacs中运行perltidy的简洁函数:

;; 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))) ;; 运行perltidy的灵活功能 (defun perltidy区域() “在当前区域上运行perltidy。” (互动) (省去远足 (区域(点)上的shell命令(标记“perltidy-q”nil t)))
正在删除Switch.pm,因为它已按给定/何时设置为本机。因此,您关于移除开关的评论是好的,但您将其替换为given/when,而不是Perl4构造。:)@兰德尔很公平。但是在早期版本中,我对Switch.pm感到头疼,如果不使用5.10,最好不要使用它,IMHO。谢谢提醒!我绝对不知道Switch.pm的给定/时间或问题。这也为我节省了很多可能会导致错误的重构时间/精力。值得注意的是,cperl模式解析给定的/when结构比StackOverflow解析器要好得多;)cperl模式6.2以与switch/case相同的方式给出/时,也不会将其作为关键字突出显示。我想那是在待办事项清单上!没有。谢谢你提供的信息。我可以肯定地看到分派表的使用,但考虑到这个问题,这有点脱离主题。