Perl 中的报警功能是否有替代方法可以在 Windows 上使用?
闹钟似乎在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 $inputn";
sub input_timed_out {
die "NO USER INPUT IN TIME";
}
在
Windows Perl上,没有简单/方便的方法可以在STDIN
上超时。下面实现了一个带有超时的简单阅读行函数。它不处理退格键或光标键,因此您仍然必须实现这些键。它演示了如何在 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";