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

如何在perl中检查空输入并调整输入类型,perl,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 "t

伙计们,我如何在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 $_;

}
my$number=int(1+100兰特);
而(){
大口大口;
最后一个if($\ueq=~/exit | quit/i或$\eq$number);
打印“太高!\n”如果(定义的$\u&&$\ u>$number);
如果(定义的$&&$<$number)打印“太低!\n”;
打印美元;
}
所以基本上,用户输入一些东西,如果它是一个数字,它会与默认的随机数进行比较。它根据数字打印低或高。但当我只按enter键而不输入某些内容时,它仍然会转到if语句,并给出一个错误,即我输入的内容不是数字(由于此代码$\u<$number)


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

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

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

 $_=~/^\s*$/
$_=~/(exit|quit|\D)/i
比较输入是否为空白

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

 $_=~/^\s*$/
$_=~/(exit|quit|\D)/i
请注意\D,它只匹配非数字字符。但由于它是一个“或”,一旦输入一个特定的非数字字符(退出或退出),它就会短路,立即终止循环

谢谢大家

只要定义了
的返回值,即您不在EOF,那么
while(){…}
就会循环。因此,
$\uu
总是在循环中定义

要断言某些输入是数字的,您可以使用来自或使用简单正则表达式的
looks\u like\u number

unless (/\A[0-9]+\z/) {
  print "not numeric!\n";
  next;
}
在这之后,我们可以将
$\uuu
的值视为一个数字整数,并且可以确保
使用警告
不会抱怨。例如

# 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";
}
#从输入中删除换行符
咀嚼;
#中止条件测试
最后一个if/\b(?:退出|退出)\b/;
#断言数字输入
除非(/\A[0-9]+\z/){
打印“非数字!\n”;
下一个
}
#根据机密$number检查输入
如果($\u==$number){
打印“正确!\n”;
最后;
}elsif($\<$number){
打印“太低\n”;
}elsif($\u>$number){
打印“太高\n”;
}

否,while循环不会在空输入时终止。我测试过了。相反,我得到一个错误,说“”不是数字注意:
\D
字符类可以包含许多Perl无法转换为数字的数字字符
\D
通常可以看到Unicode意义上的数字。charclass
[^0-9]
(匹配任何不能是ASCII整数的数字)可能稍微正确一些。