出於某種原因,奇怪的循環行爲,我簡單的菜單程序,奇怪的事情發生,因爲ReadKey的結果()perl的 - 與ReadKey
#!/usr/local/bin/perl
use strict ;
use warnings ;
use English ;
use Term::ReadKey ;
my @available_choices = ('choice one', 'choice two', 'choice three') ;
my $array_size = scalar (@available_choices) ;
print "\nPlease make your selection from the options below:\n\n" ;
for (my $i=0, my $j=1 ; $i < $array_size ; $i++, $j++) {
print "$j) $available_choices[$i]\n" ;
}
my $key = undef ;
for (my $k=0; $k < 5; $k++) {
print "\nSelection :> " ;
$key = ReadKey();
if ((defined $key) && ($key =~ /[1-$array_size]/)) {
print "\nYou selected \"$available_choices[$key-1]\"\n" ;
last ;
}
else {
sleep 1 ;
}
}
所以,如果你運行這個簡單的程序,並給予1,2,或3作爲您的選擇它按預期工作。如果你輸入了其他東西(來觸發else塊),那麼在ReadKey()再次接受輸入之前,循環重複3或4次。這個輸出最好的說明(我進入XXX,然後在「選擇:>」印刷3次,我能鍵入YYY前):
$ ./bar.pl
Please make your selection from the options below:
1) choice one
2) choice two
3) choice three
Selection :> xxx
Selection :>
Selection :>
Selection :>
Selection :> yyy
Duh。 「ReadKey讀取_key_」說明了一切。謝謝! –