0

伙计们,我如何检查 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 语句并给出一个错误,即我输入的不是数字(由于此代码 $_ < $number)。

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

4

2 回答 2

1

while(<>){...}只要定义了返回值<>,即您不在EOF,就会循环。所以$_总是defined在循环内。

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

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

之后,我们可以将 的值$_视为数字整数,并且可以肯定use warnings不会抱怨。例如

# 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";
}
于 2013-05-09T06:16:53.763 回答
0

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

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

 $_=~/^\s*$/

比较输入是否为任何空格

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

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

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

多谢你们

于 2013-05-09T06:16:19.840 回答