2013-08-26 3 views
-1

Я использую Term :: ReadLine :: Gnu, Я пытаюсь использовать атрибут event_loop, или event_hook, или callback_read_char без успеха.функция вызова при чтении STDIN

С event_loop, я стараюсь образца в док

$term->event_loop(sub { 
    my $data = shift; 
    $data->[1] = AE::cv(); 
    $data->[1]->recv(); 
    }, sub { 
     my $fh = shift; 
     my $data = []; 
     $data->[0] = AE::io($fh, 0, sub { $data->[1]->send() }); 
     $data; 
    }); 

и у меня есть:

не может сделать `event_loop» в Term :: ReadLine :: Гну

event_hook работает, но не так, как я хочу ... он слишком часто называется во время ожидания не только при печати символа.

я не нашел, как использовать атрибут callback_read_char и если отвечает моим потребностям ...

Итак, как проверить вход (для печати только цифры) и ограничить длину ввода 10 цифр? Как я могу это сделать? или мне нужно использовать другой модуль?

+0

Вы должны опубликовать попытку здесь в любом случае, даже если он не работает. Это помогает нам помочь вам лучше. – Zaid

ответ

0

это то, что я хотел:

#!/usr/bin/perl -w 
use strict; 
use warnings; 

use Term::Screen::ReadLine; 
use Data::Dumper; 


main(); 

sub main 
{ 
    $| =1 ; 
    my $scr = new Term::Screen::ReadLine; 
    $scr->clrscr(); 
    $scr->at(1,17)->puts('xxxxxxxxxxxxxxxxxxxxxxxxx'); 
    $scr->at(2,21)->puts('*****************'); 
    $scr->at(4,0)->puts('- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'); 
    $scr->at(5,0)->puts(' xxxxxxxxxxxxxxxxxxxxxx: ...................'); 

    my $line=$scr->readline(
     ROW   => 5, 
     COL   => 26, 
     LEN   => 19, 
     DISPLAYLEN => 19, 
     LINE  => '', 
     ONLYVALID => "[[:digit:]]+", 
     CONVERT  => undef, 
     PASSWORD => undef, 
     OVERWRITE => 1, 
    ); 
    $scr->at(6,0)->puts(' debug => :' . $line); 
} 
Смежные вопросы