为什么切换不起作用?

时间:2014-03-27 09:20:08

标签: perl switch-statement mod-perl perl-data-structures

此程序抛出错误。问题是我必须使用switch case。我怎么能在Perl中做到这一点?

#use strict;
#use warnings;
my $input = print "Enter the number";
$input = <STDIN>;
switch($input){
    case "1" {print "UPC"}
    case "2" {print "ES"}
    case "3" {print "MS"}
    else {print "Enter the correct value"}
}

2 个答案:

答案 0 :(得分:2)

Perl's built in version of the case statement有点不同:

use feature "switch";

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

您可以使用use Switch;添加更传统的案例陈述,但RobEarl指出这是不推荐的。

此外,从不注释掉use strict; use warnings;作为解决问题的尝试!

答案 1 :(得分:2)

您需要导入Switch才能使用它:

use Switch;

但是,Switch已经deprecated。请参阅此问题:Why is the Switch module deprecated in Perl?

这里讨论了一些替代方案(及其实验状态):http://perldoc.perl.org/perlsyn.html#Switch-Statements

总之,如果您使用的是Perl&gt; 5.10.1,则可以将以下内容用于非弃用的非实验性切换:

use v5.10.1;
for ($var) {
    when (/^abc/) { $abc = 1 }
    when (/^def/) { $def = 1 }
    when (/^xyz/) { $xyz = 1 }
    default { $nothing = 1 }
}