我的原始答案部分不正确,我已更正。
Term::Cap模块用于操作一个简单的、过时的终端相关数据库。从描述:
这些是从终端能力 (termcap) 数据库中提取和使用能力的低级函数。
该数据库可能不存在于现代的 Unix 实现(例如 Linux)上。perl 模块infocmp -C
在找不到数据库文件时用于获取终端信息。
我认为您的示例基于文档,该文档在使用$FH
. perl 中的print
语句只是简单地转到标准输出,并且没有任何定位,因为Tgoto
返回定位的控制字符。它可以通过两种方式用于定位:
print $terminal->Tgoto('cm',5,2);
或者
$terminal->Tgoto('cm',5,2,*STDOUT);
您可能还希望自动刷新标准输出以避免缓冲效应,请参见下面的完整示例,该示例还具有正确使用的特点Trequire
:
use Term::Cap;
use strict;
my $ospeed = 9600;
my $terminal = Tgetent Term::Cap { TERM => undef, OSPEED => $ospeed };
$terminal->Trequire(qw/cl cm/);
STDOUT->autoflush(1); ### turn off buffering
print $terminal->Tputs('cl'); ### clear screen
my ($row, $col) = (16, 10);
foreach my $word (reverse(qw(ALL YOUR TERMCAP ARE BELONG TO US))) {
sleep(1);
print $terminal->Tgoto('cm', $row, $col--); ### position cursor
print $word;
}
print $terminal->Tgoto('cm', 0, 18);
Trequire
正在检查您正在使用您在由 short termcap 字符代码表示的程序中使用的cap能力的术语。在上面的程序中:用于清除屏幕和主光标以及用于位置光标。如果终端不支持指定的列表,它将抛出异常并终止程序。cl
cm
这个空间中用于 unix的古老高级库被称为 curses 并用于“全屏”命令,如vi
. 它的现代版本是ncurses。我建议在CPAN上搜索 curses以找到具有适合您用例的功能的东西。