我很难弄清楚如何验证匹配字符串后跟用户参数的用户输入,它总是转到我的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;
}`
答案 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]") )