我想在perl中编写一个脚本,它将为变量定义一个值“10”。 然后,它将要求用户通过STDIN为该变量输入值。 如果用户在固定的TIME INTERVAL中输入值,则取该值,否则通过取默认值10继续该程序。
我不知道该怎么做。我想到了这样的事情...... $ t = 120(持续120秒) 如果用户输入某个值,则每秒减少“$ t”的值 然后退出循环,继续,否则当$ t变为0时,取默认值并继续。 但是,我不知道如何随着时间的推移减少变量的值,同时要求用户输入。
我可以这样做,随着时间减少变量值,但在此范围内,我无法接受输入。
答案 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。