在Windows中等待Perl输入时超时并发出警报



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";

相关内容

  • 没有找到相关文章