一文字入力待ち


 Term::ReadKeyIO::Promptモジュールを使うと利用者からの一文字入力待ちの処理を簡単に書けるようになります。
 getc関数も一文字入力ですが、バッファリングの影響でEnterキーが押されるまで入力待ちしてしまう場合があり、これを避けるための処理(例えばstty)が必要になるのでモジュールを使う方が良いでしょう。
 私の環境ではWindows XPのActive Perl上ではIO::Promptを使おうとすると Cannot write to terminal というエラーになり上手く行きませんでした。
use strict;
use warnings;
use Term::ReadKey;
use Time::HiRes;

print "Hit Any Key.\n";
my $key;
while (not defined ($key = ReadKey(-1))) {
    Time::HiRes::sleep(0.1);
}
printf "input key is [%s]\n", $key;
use strict;
use warnings;
use IO::Prompt;

# -one_char 一文字入力
# -echo     表示文字
my $key = prompt "Hit Any Key.\n", -one_char, -echo => '';
printf "input key is [%s]\n", $key;

関連項目

getc関数
タイムアウト処理
入力文字列の履歴を保存
Yes/No確認プロンプト