如何检查空输入并调整perl中的输入类型

时间:2013-05-09 06:10:51

标签: perl

伙计们如何检查perl中的空输入?包括空格,制表符,换行符等。

这是我的示例代码,但它不起作用:我做错了什么?

my $number=int (1+rand 100);

while (<>) {
    chomp $_;
    last if ($_=~/exit|quit/i or $_ eq $number);
    print "too high! \n" if (defined $_ && $_ > $number);
    print "too low!\n" if (defined $_ && $_ < $number);
    print $_;

}

所以基本上,用户输入一些东西,如果它是一个与默认随机数相比较的数字。它根据数字打印低或高。但是,当我只是按Enter键而不输入某些内容时,它仍然会转到if语句并给出错误,即我输入的内容不是数字(由于此代码$ _&lt; $ number)。

另一个问题是如何处理输入以仅允许单词“exit”或“quit”和数字。除此之外它会退出。

2 个答案:

答案 0 :(得分:1)

只要定义while(<>){...}的返回值,<>就会循环,即您不在EOF。因此$_在循环中总是defined

要断言某些输入是数字输入,您可以使用Scalar::Util中的looks_like_number或使用简单的正则表达式:

unless (/\A[0-9]+\z/) {
  print "not numeric!\n";
  next;
}

之后,我们可以将$_的值视为 number 整数,并且可以确保use warnings不会抱怨。 E.g。

# remove newline from input
chomp;
# Test for abort condition
last if /\b(?:quit|exit)\b/;
# Assert numeric input
unless (/\A[0-9]+\z/) {
  print "not numeric!\n";
  next;
}
# Check input against secret $number
if ($_ == $number) {
  print "Correct!\n";
  last;
} elsif ($_ < $number) {
  print "too low\n";
} elsif ($_ > $number) {
  print "too high\n";
}

答案 1 :(得分:0)

抱歉这个愚蠢的问题,得到了我的第一个问题的答案。

您只需将此代码添加到第一个条件

 $_=~/^\s*$/

比较输入是否是任何空格

并且对于第二个仅限制“退出”和“退出”作为有效的非数字输入,将此一个添加到第一个条件中的第一个正则表达式比较

$_=~/(exit|quit|\D)/i

注意\ D只匹配非数字字符。但由于它是“OR”,一旦输入特定的非数字字符(退出或退出),它将短路,立即终止循环。

谢谢你们