随时间减少变量值

时间:2012-06-29 05:10:04

标签: perl

我想在perl中编写一个脚本,它将为变量定义一个值“10”。 然后,它将要求用户通过STDIN为该变量输入值。 如果用户在固定的TIME INTERVAL中输入值,则取该值,否则通过取默认值10继续该程序。

我不知道该怎么做。我想到了这样的事情...... $ t = 120(持续120秒) 如果用户输入某个值,则每秒减少“$ t”的值 然后退出循环,继续,否则当$ t变为0时,取默认值并继续。 但是,我不知道如何随着时间的推移减少变量的值,同时要求用户输入。

我可以这样做,随着时间减少变量值,但在此范围内,我无法接受输入。

3 个答案:

答案 0 :(得分: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";

答案 1 :(得分:1)

你可以 通过 IO ::选择

完成此任务
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" ;

答案 2 :(得分:1)

我认为你正在寻找Prompt::Timeout