【问题标题】:call function while reading STDIN [closed]读取 STDIN 时调用函数 [关闭]
【发布时间】:2013-08-26 07:48:19
【问题描述】:

我使用 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 有效,但不像我想要的那样......它在等待期间被频繁调用,不仅在打印字符时。

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

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

【问题讨论】:

  • 无论如何,您都应该在此处发布您的尝试,即使它不起作用。这有助于我们更好地帮助您。

标签: perl readline


【解决方案1】:

这就是我想要的:

#!/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);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多