开关语句-控制流验证在perl



这是我的代码,有开关语句工作良好,但如果用户输入大于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或空白数据,它不应该传递给另一个子例程,它应该留在同一个子例程上,我怎么能做到这一点?

redo:

将提示代码包装成一个块
#!/usr/bin/perl
use warnings;
use strict;
use Switch::Plain;
PROMPT: {
    chomp(my $input = <>);
     nswitch ($input) {
         case 1  : { print "UPCn" }
         case 2  : { print "URLn" }
         case 3  : { print "Elastic Searchn" }
         default : { print "Enter the correct valuen" ; redo PROMPT }
     }
}

我使用Switch::Plain而不是Switch,因为它更安全(它不使用源过滤器)并且对您的情况足够。

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 }
    };
}

最新更新