读取STDIN时调用函数

时间:2013-08-26 07:48:20

标签: perl readline

我使用Term :: ReadLine :: Gnu, 我尝试使用event_loop,event_hook或callback_read_char属性但没有成功。

使用event_loop,我在doc

中尝试示例
$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;
    });

我有:

  

不能在Term :: ReadLine :: Gnu

中执行`event_loop'

event_hook有效但不像我想要的......在等待不仅仅是在打印字符时,它经常被调用。

我没有找到如何使用callback_read_char属性,如果符合我的需要......

那么,如何检查输入(仅打印数字)并将输入长度限制为10位? 我怎样才能做到这一点?还是我必须使用另一个模块?

1 个答案:

答案 0 :(得分: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);
}