我想用 perl 编写一个脚本,为变量“10”定义一个值。然后,它将要求用户通过标准输入输入该变量的值。如果用户在固定的时间间隔内输入值,则取该值,否则通过取默认值 10 继续程序。
我不知道该怎么做。我想到了这样的事情.. $t = 120(120秒)每秒减少“$ t”的值,如果用户输入某个值然后退出循环并继续,否则当$ t变为0时,取默认值并继续。但是,我不知道如何随着时间的推移减少变量的值以及询问用户的输入。
我可以做到这一点,随着时间的推移减少变量的值,但在那之内,我无法接受输入。
我想用 perl 编写一个脚本,为变量“10”定义一个值。然后,它将要求用户通过标准输入输入该变量的值。如果用户在固定的时间间隔内输入值,则取该值,否则通过取默认值 10 继续程序。
我不知道该怎么做。我想到了这样的事情.. $t = 120(120秒)每秒减少“$ t”的值,如果用户输入某个值然后退出循环并继续,否则当$ t变为0时,取默认值并继续。但是,我不知道如何随着时间的推移减少变量的值以及询问用户的输入。
我可以做到这一点,随着时间的推移减少变量的值,但在那之内,我无法接受输入。
这是一个简单的示例,说明如何使用警报信号进行操作。
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";
我认为您正在寻找Prompt::Timeout。
您也可以使用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" ;