编辑:在阅读了回复后,我相信答案是“不要这样做”,因此我标记了一个适当的回复作为官方的答案。
有什么简单的方法可以让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" }
}下面是在代码段上运行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" }
}我有种莫名其妙的冲动要坚持如果-elsif结构.
ps。我认为这描述了所需的过程,但是它看起来需要一段时间来解析。
发布于 2009-10-28 22:54:47
抱歉,我帮不了你。不过,我建议你坚持
if ( condition ) {
}
elsif( other_condition ) {
}
else {
}而不是使用可怕的Switch.pm。请参阅尼古拉斯·克拉克给搬运工的信息
在下一个主要版本中,开关将从Perl核心发行版中删除。
更多关于PerlMonks的讨论。
正如Randal在下面的评论中指出的,从5.10perl版本开始,Perl有一个功能强大的替换,它不依赖于源代码过滤器:
use feature "switch";
given($_) {
when (/^abc/) { $abc = 1; }
when (/^def/) { $def = 1; }
when (/^xyz/) { $xyz = 1; }
default { $nothing = 1; }
}发布于 2009-10-28 23:51:33
您是否考虑过使用分派表,如Mark在高阶Perl?中概述的那样
https://stackoverflow.com/questions/1640446
复制相似问题