perl中的控制流验证

时间:2014-03-27 11:16:28

标签: perl switch-statement subroutine

这是我的代码,其中switch语句工作正常,但如果用户输入大于3或空白文本,那么它应该保留在第一个子例程中如何在perl中执行此操作

use strict;
use warnings;
use Switch;

my $input = "Enter the number:";


sub input(){
    print "Choose You Input Method"."\n";
    print "1.UPC"."\n";
    print "2.URL"."\n";
    print "3.Elastic Search"."\n";
    print $input;
    $input = <>;
    chomp($input);
    switch($input){
        case 1 {print "UPC"."\n"}
        case 2 {print "URL"."\n"}
        case 3 {print "Elastic Search"."\n"}
        else {print "Enter the correct value"."\n"}

}
}

input();

my $pinput = "Enter the number:";
sub pinput(){
    print "Choose Your Process Method"."\n";
    print "1.API"."\n";
    print "2.Mongo"."\n";
    print $pinput;
    $pinput = <>;
    chomp($pinput);
    switch($pinput){
       case 1 {print "API"."\n"}
       case 2 {print "MONGO"."\n"}
       else {print "Enter the correct value"."\n"}
}
}

pinput();

如果用户输入类似4或空白数据的东西,它不应该传递到另一个子程序,它应该保留在同一个子程序中我该怎么做?

2 个答案:

答案 0 :(得分:0)

将提示代码包装到redo

的块中
#!/usr/bin/perl
use warnings;
use strict;

use Switch::Plain;

PROMPT: {
    chomp(my $input = <>);
     nswitch ($input) {
         case 1  : { print "UPC\n" }
         case 2  : { print "URL\n" }
         case 3  : { print "Elastic Search\n" }
         default : { print "Enter the correct value\n" ; redo PROMPT }
     }
}

我使用Switch::Plain代替Switch,因为它更安全(它不使用源过滤器)并且足以满足您的需求。

答案 1 :(得分:0)

perlfaq7 - How do I create a switch or case statement?

使用5.10以来的内置函数

use 5.010;

use strict;
use warnings;

PROMPT: {
    chomp(my $input = <>);
    given ( $input ) {
        when( '1' )  { say "UPC" }
        when( '2' )  { say "URL" }
        when( '3' )  { say "Elastic Search" }
        default      { print "Enter the correct value"; redo PROMPT }
    };
}