如何进行无限输入循环,直到他在 Perl 中退出,因为即使在输入 quit 或 q 后我也无法正确退出代码。非常感谢您的帮助。
do
{
&ipdiscover;
print "enter q or quit to exit";
my $input=<>;
chomp($input);
if($input=="quit")
exit;
}until(($input eq "quit")||($input eq "q"));
&ipdiscover
– 永远不要调用这样的函数,除非你知道所有的副作用。如果有疑问,请执行ipdiscover()
。
不要将字符串与==
运算符进行比较:这会将参数强制为数字。如果它看起来不像一个数字,你会得到零。对于大多数s来说,这$input == "quit"
很可能是正确的。$input
但是,if
语句是根据块定义的,而不是根据语句(如在 C 中)。因此,你必须做
if ($input eq "quit") {
exit;
}
或简写:exit if $input eq "quit";
. 但是你为什么要这样做呢?exit
终止整个程序。
另一方面,until(($input eq "quit")||($input eq "q"))
它是一个正确的终止条件,一旦你修复了$input
.
我认为您应该执行以下操作,因为这样可以更好地处理输入的结尾(例如在 Linux 上:Ctrl-D、Windows;Ctrl-Z):
use strict; use warnings; # put this at the top of every program!
while(defined(my $answer = prompt("type q or quit to exit: "))) {
last if $answer eq "q"
or $answer eq "quit"
}
sub prompt {
my ($challenge) = @_;
local $| = 1; # set autoflush;
print $challenge;
chomp( my $answer = <STDIN> // return undef);
return $answer;
}
您可以通过说这是last
迭代来留下一个循环。