如果语句匹配字符串和用户参数

时间:2013-05-01 04:52:57

标签: perl if-statement arguments

我很难弄清楚如何验证匹配字符串后跟用户参数的用户输入,它总是转到我的else语句。

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 个答案:

答案 0 :(得分:1)

您可以使用CPAN上提供的Params :: Validate包。在页面上引用一个例子

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

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

<强> Params::Validate

答案 1 :(得分:1)

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

(如果需要,使用\ w +以外的东西来匹配你的“x”)

答案 2 :(得分:0)

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

答案 3 :(得分:0)

变化:

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

由:

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