2013-08-28 124 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

相關問題