-1

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

使用 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;
    });

我有:

不能在 Term::ReadLine::Gnu 中执行 `event_loop'

event_hook 有效,但不像我想要的那样......它在等待期间被频繁调用,不仅在打印 char 时。

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

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

4

1 回答 1

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);
}
于 2013-08-27T02:54:02.517 回答