との奇妙なループ動作、私の簡単なメニュープログラムでは、奇妙な物事が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、選択したものが期待どおりに動作します。何か他のものを入力すると(elseブロックをトリガーするために)、ReadKey()が入力を受け入れる前にループが3回または4回反復します。ベストこの出力によって示される(私はXXXを入力した後、「選択:>」私はYYYを入力することができたの前に3回印刷):
$ ./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
ダー。 "ReadKeyは_key_を読み込みます"というメッセージが表示されます。ありがとうございました! –