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>
<~>
答案 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>