Switch::Plain -对非数字输入抛出警告



程序重做时抛出错误,我该如何解决这个问题

use strict;
use warnings;
use Switch::Plain;
my %data = (0 => "Enter the number",1 => "UPC",2 => "URL", 3 => "Elastic Search", 4 => "API", 5 => "MONGO", 6 => "TSV", 7 => "SQL", 8 => "JSON", 9 => "Enter the correct value");
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;
    PROMPT: {
    chomp(my $input = <>);
     nswitch($input){
        case 1 : {print "UPC"."n"}
        case 2 : {print "URL"."n"}
        case 3 : {print "Elastic Search"."n"}
        default: {"Enter the correct value"; redo PROMPT }
      }

}
}
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);
    nswitch($pinput){
       case 1 : {print "API"."n"}
       case 2 : {print "MONGO"."n"}
       default : {print "Enter the correct value"."n"}
}
}
pinput();
抛出的错误是
Argument "" isn't numeric in numeric eq (==) at framework.pl line 21, <> line 1
如果使用的输入中有任何不匹配,例如,如果用户键入空值或4?

请帮我解决一下?

您可以通过添加0或乘以1将输入转换为数字,

$pinput = <> *1;

或转换为chomp

之后
$pinput *= 1;

查看How do I create a switch or case statement?

如果你使用的是5.10或更新的版本,你可以使用内置方法来实现。那么一种解决方案是将匹配的对象视为字符串而不是数字:

use 5.010;
use strict;
use warnings;
print "Choose You Input Method"."n";
print "1.UPC"."n";
print "2.URL"."n";
print "3.Elastic Search"."n";
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 }
    };
}

相关内容

  • 没有找到相关文章

最新更新