2015-11-28 68 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";