タイムアウト処理


 ある時間で処理を打ち切る場合にはalarm関数を使います。
 WindowsのActivePerlではバージョンによってはalarm関数がサポートされていない場合があります。
use strict;
use warnings;

my $alarm_time = 5;
printf "%d秒以内に何か入力して下さい。\n", $alarm_time;
eval {
        local $SIG{ALRM} = sub { die "timeout" };

        alarm $alarm_time;
        my $input_string = <>;
        alarm 0;

        chomp $input_string;
        printf "%sが入力されました。\n", $input_string;
};
if ($@) {
        # エラー処理
        if ($@ =~ /timeout/) {
                # タイムアウトエラー
                print "タイムアウトしました。\n";
        } else {
                # その他のエラー
                alarm 0;
                die $@;
        }
}

関連項目

alarm関数
一文字入力待ち