在Windows中可以使用Perl中的警报功能吗?
警报似乎在Windows中不起作用。
如果在N秒内未输入任何用户输入,则以下代码应超时。该代码在linux上运行良好,但在Windows上却挂在那里。
代码:
$SIG{ALRM} = \&input_timed_out;
eval {
alarm(10);
$input = <>;
alarm(0);
print $input."\n";
}
print "eval exit with: $@ \n";
if ( $@ =~ /NO USER INPUT IN TIME/ ) {
print "Timed out.\n";
$input = "quit";
}
print "Answer is $input\n";
sub input_timed_out {
die "NO USER INPUT IN TIME";
}
答案 0 :(得分:1)
在Windows Perl上没有简单/方便的方法来使STDIN
上的超时。以下代码实现了带有超时的简单的readline函数。它不处理退格键或光标键,因此您仍然必须实现它们。它演示了如何在Windows上为STDIN实现超时。
#!perl
use strict;
use warnings;
use Term::ReadKey;
sub timed_input {
my $end_time = time + shift;
my $string ;
do {
my $key = ReadKey(1);
$string .= $key if defined $key;
print "\r$string" if (defined $string);
} while (time < $end_time);
return $string
};
my $input = '';
if( -t ) {
# we are interactive
$input = timed_input(3);
} else {
$input = <>;
};
print "Input is [$input]\n";