【发布时间】:2013-08-12 01:42:53
【问题描述】:
我将 keypad 设置为 1,因为我想对输入的字符进行更多控制(例如,在下面的示例中,我想检测 KEY_DOWN。如果我关闭了 keypad,这将不起作用)。但是,我需要检测一个字符是否可打印。我以为我可以使用[[:print:]],但我误解了一些东西。例如,如果我运行以下 MWE 并输入退格键,我会得到 263 的输出,而我想要输出 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();
请注意,我是一个有诅咒和输入字符处理的新手(你不需要在批评中感到遗憾,但我这样说只是为了让你知道我真的不知道我在做什么并且会是感谢任何详细的解释)。
【问题讨论】:
-
getch()不返回整数吗?然后它总是可以打印的。