3

「10」などの変数の値を定義するスクリプトをperlで書きたいと思います。次に、その変数の STDIN を介して値を入力するようにユーザーに求めます。ユーザーが固定の TIME INTERVAL 内に値を入力した場合はその値を使用し、それ以外の場合はデフォルト値の 10 を使用してプログラムを続行します。

私はそれを行う方法がわかりませんでした。$t=120 (120 秒間) 1 秒ごとに "$t" の値を減らし、ユーザーが何らかの値を入力した場合はループから抜けて続行し、そうでない場合は $t が 0 になると、デフォルト値を使用して続行します。しかし、ユーザーに入力を求めるとともに、時間の経過とともに変数の値を減らす方法がわかりません。

私はこれを行うことができ、変数の値を時間とともに減少させますが、その中で入力を取得できません。

4

3 に答える 3

4

これは、アラーム信号でどのように行うかの簡単な例です。

use strict;
use warnings;

my $input = eval {
    my $tmp;

    # this sub will be called after the timeout set by the alarm below
    local $SIG{ALRM} = sub {
        print "timeout - using default value 10\n";
        $tmp = 10;
    };

    print "enter input: ";
    alarm 10;    # wait for 10 secs
    $tmp = <>;
    alarm 0;     # turn off alarm if we got input within 10 secs
    $tmp;
};

print "the value is: $input\n";
于 2012-06-29T06:32:06.917 に答える
1

Prompt::Timeoutを探していると思います。

于 2012-06-29T14:19:38.890 に答える
1

IO::Selectでこれを達成することもできます

use strict;
use IO::Select;

my $value = 10;
my $obj = IO::Select->new(\*STDIN);
foreach my $hand ($obj->can_read(2)) {
    $value = <$hand> ;
}
print "value is :$value:\n" ;
于 2012-06-29T07:44:00.437 に答える