从与 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
模块。