是否有类似“键盘”的东西没有使用“诅咒”?

时间:2012-03-28 17:54:35

标签: perl console terminal

Curses之外是否有与keypad(1)类似的内容? 我想写这样的东西,但是没有使用Curses并且没有自己处理转义序列。

#!/usr/bin/env perl
use warnings;
use 5.012;
use Curses;

initscr();
raw();
printw( qq{Press "Delete"} );
noecho();
keypad(1); 
my $c = getch();
endwin();

if ( $c =~ /\A330\z/ ) {
    say "OK";
} else {
    say qq{You didn't press "Delete"};
}

当我使用Term::ReadKey时,它表现不同:

#!/usr/bin/env perl
use warnings;
use 5.012;
use Term::ReadKey;

ReadMode('raw');

print qq{Press "Delete" };
while ( 1 ) {
    my $c = ReadKey( 0 );
    last if $c eq 'q';
    say "<$c>";
}

ReadMode('normal');

按“删除”后输出:

Press "Delete" <
<[>
<3>
<~>

2 个答案:

答案 0 :(得分:3)

你想要避免的诅咒是什么?

您可能会发现Term::TermKey有用。它是libtermkey库的Perl接口,它处理键盘控制字符和多字节转义序列以及UTF-8字符。

答案 1 :(得分:2)

正如Borodin已经提到的,Term::TermKey可能有所帮助:

use warnings;
use 5.012;
use Term::TermKey;

my $tk = Term::TermKey->new( \*STDIN );

print qq{Press "Delete" };
while( 1 ) {
   $tk->waitkey( my $key );
   say "<", $tk->format_key( $key, 0 ), ">";
}

给出

Press "Delete" <Delete>