伙计们如何检查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”和数字。除此之外它会退出。
答案 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”,一旦输入特定的非数字字符(退出或退出),它将短路,立即终止循环。
谢谢你们