3

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

我不知道该怎么做。我想到了这样的事情.. $t = 120(120秒)每秒减少“$ 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 回答