0

I'm having difficulty figuring out how to validate user input that matches a string followed by user arguments, it always goes to my else statement.

elsif ($user_input eq "sort by" && $ARGV[2])
    {
            print"this is working";
            #use arguments to sort by user command
            print $ARGV[2], "\n\n\n";

    }
    else #user validation
    {
            print "Error, please re-enter command \n\n";
            &Menu;
    }`
4

4 回答 4

1
elsif ( my ($sort_by_what) = $user_input =~ /^sort by (\w+)\z/ ) {
    print "ok, I'll sort by $sort_by_what\n";
}

(如有必要,请使用 \w+ 以外的其他内容来匹配您的“x”)

于 2013-05-01T06:24:53.200 回答
1

您可以使用 CPAN 上可用的 Params::Validate 包。引用页面上的示例

 validate(
        @_,
        { foo => { regex => qr/^\d+$/ } }
    );

您可以使用它来针对特定的正则表达式验证输入参数。Params::Validate 还可以为您做其他有用的检查。

参数::验证

于 2013-05-01T05:50:15.010 回答
0

我不确定我是否理解您的问题,您是否要检查彼此独立的字符串验证和用户参数。您正在使用短路和操作“&&”,因此当它遇到第一个 false 时,它​​会停止检查表达式的其余部分。这对你有帮助吗?

于 2013-05-01T05:02:32.713 回答
0

改变:

elsif ($user_input eq "sort by" && $ARGV[2])

经过:

elsif( defined($ARGV[2]) and ($user_input eq "sort by $ARGV[2]") )
于 2013-05-01T05:40:23.180 回答