如何在perl中检查空输入并调整输入类型
伙计们,我如何在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
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整数的数字)可能稍微正确一些。