2013-08-28 71 views
0

如何在Perl中退出之前接受无限输入循环,因为即使在输入quit或q之后,我仍然无法正确退出代码。非常感谢您的帮助。无限输入循环,直到用户在Perl中退出

do 
{ 
&ipdiscover; 
print "enter q or quit to exit"; 
    my $input=<>; 
    chomp($input); 
    if($input=="quit") 
    exit; 
}until(($input eq "quit")||($input eq "q")); 
+0

为什么你在一个条件中使用'=='而另一个在字符串中使用'eq'? – squiguy

+0

它不编译。 “ – Toto

+0

do print”输入I.P地址查找发现名称“。”\ n“; &ipdiscover; 打印“输入q退出并继续任何其他单词”。“\ n”; my $ input = ; chomp($ input); ($ input eq“q”)||($ input eq“quit”));如果(($ input eq“q”)) (($ input eq“quit”)||($ input eq“q”)); – JustCoder

回答

5

&ipdiscover - 永远不会调用函数一样,除了当你知道所有的副作用。如有疑问,请做ipdiscover()

不要将字符串与==运算符进行比较:将参数强制转换为数字。如果它看起来不像一个数字,你会得到零。所以$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迭代。

+0

非常有帮助的信息! – JustCoder