2015-11-28 37 views
3

什么是说等待一个限定的时间段为输入在Perl

等待10秒,输入
如果没有输入公认
打印的东西

方式

在Perl中?

+0

也许这可以使用:[Perl的 - 自定义键盘处理程序(http://stackoverflow.com/questions/27637326/perl-custom-keystroke-handlers) –

+0

Perl的食谱描述涉及[IO的溶液: :Handle](http://p3rl.org/IO::Handle),[IO :: Select](http://p3rl.org/IO::Select)和[Symbol](http:// p3rl。组织/符号)。 – choroba

+0

这[讨论](http://www.perlmonks.org/?node_id=282322)可能会对您有所帮助。 –

回答

1

您可以使用alarm()

use strict; 
use warnings; 

sub timeout { 

    my ($f, $sec) = @_; 

    return eval { 
    local $SIG{ALRM} = sub { die }; 
    alarm($sec); 
    $f->(); 
    alarm(0); 
    1; 
    }; 
} 

my $text; 
my $ok = timeout(sub{ $text = <STDIN>; }, 10); 

if ($ok) { 
    print "input: $text"; 
} 
else { 
    print "timeout occurred\n"; 
} 
3

IO::Selectcan_read一个超时。

#!/usr/bin/env perl 

use strict; 
use warnings; 
use IO::Select; 

my $select = IO::Select->new(); 
$select->add(\*STDIN); 

my $input = "NONE"; 
if ($select->can_read(10)) { 
    $input = <STDIN>; 
} 

print "Got input of $input\n";