getc FILEHANDLE
getc

从与 FILEHANDLE 相连的输入文件中返回下一个字符,或在文件末尾或发生错误时返回未定义的值(在后一种情况下,$! 被设置)。如果省略 FILEHANDLE,则从 STDIN 读取。这效率不高。但是,它不能单独用于获取单个字符而无需等待用户按下回车键。为此,请尝试类似于以下内容:

if ($BSD_STYLE) {
    system "stty cbreak </dev/tty >/dev/tty 2>&1";
}
else {
    system "stty", '-icanon', 'eol', "\001";
}

my $key = getc(STDIN);

if ($BSD_STYLE) {
    system "stty -cbreak </dev/tty >/dev/tty 2>&1";
}
else {
    system 'stty', 'icanon', 'eol', '^@'; # ASCII NUL
}
print "\n";

$BSD_STYLE 是否应该被设置的决定留给读者作为练习。

在声称符合 POSIX 的系统上,POSIX::getattr 函数可以更可移植地执行此操作。另请参阅 CPAN 上的 Term::ReadKey 模块。