1

keypad设置为 1 是因为我想对输入的字符进行更多控制(例如,在下面的示例中,我想检测一个. 如果我关闭,KEY_DOWN这将不起作用)。keypad但是,我需要检测一个字符是否可打印。我以为我可以使用[[:print:]],但我误解了一些东西。例如,如果我运行以下 MWE 并输入退格键,我会得到输出263while I would like output not printable。我可以尝试通过调节来解决这个问题,length(character) == 1但这似乎是我应该避免的一种技巧,我想学习正确的方法。

#!/usr/bin/perl -w

use strict;
use Curses;

initscr();
my $good_win = newwin(1, 2, 3, 1);
keypad($good_win, 1);

my $character = $good_win->getch();

if ($character eq KEY_DOWN) {
    print "you did a down arrow";
}

if ($character =~ "[[:print:]]") {
    print "you entered: $character\n";
}

else {
    print "not printable\n";
}

exit();

请注意,我是一个有诅咒和输入字符处理的新手(你不需要对批评感到遗憾,但我这样说只是为了让你知道我真的不知道我在做什么并且会感激任何详细解释)。

4

1 回答 1

0

getch[[:print:]]对于特殊键(它对字母、数字等), 不返回包含的普通字符代码。

要测试退格,您需要测试KEY_BACKSPACE您得到的 263 是哪个。

我不认为任何特殊键代码都是可打印的,因此任何大于或等于KEY_MIN(最小特殊键代码)的返回代码都将不可打印。其他值可以检查[[:print:]]

于 2013-08-12T07:51:04.293 回答