如何使用 Term::Cap 发送清除或重置?

How can I send clear or reset with Term::Cap?

当我输出 tput clear | hexdump -c 时,如果我在 kittyxterm 上,我会得到不同的结果。如何使用 Term::Cap 在相应的终端上生成这些终端信号?

我试过的是直接从文档中复制粘贴设置,

use strict;
use warnings;
use Term::Cap;
use POSIX;
my $termios = new POSIX::Termios;
$termios->getattr;
my $ospeed = $termios->getospeed;

my $terminal = Tgetent Term::Cap { TERM => undef, OSPEED => $ospeed };

然后我认为这应该可行,

$terminal->Tputs('clear', 1, *STDOUT );

但是,唉,它什么也没做。

如果我为术语提供不同的不存在名称(而不是 undef,默认为 $ENV{TERM},我得到)

Can't find a valid termcap file at ./test.pl line 9.

所以我知道它正在查找 termcap 文件并找到它。

正确的方式

termcap 的所有信号名称都是两个字母。为了清楚起见,您需要 cl

$terminal->Tputs('cl', 1, *STDOUT );

您可以在 man termcap 上找到完整列表,其中有一个完整列表:

ch   Move cursor horizontally only to column %1
cl   Clear screen and cursor home
cm   Cursor move to row %1 and column %2 (on screen)

感谢Thomas Dickey在评论中的回答

走错路

不确定我做错了什么,因为我做了临时工作

use constant CLEAR => do {
    open( my $fh, '-|', qw(tput clear) );
    scalar <$fh>;
};

这仍然启动了另一个进程,但它运行良好。如果有人知道如何以正确的方式做到这一点,我不会接受这个答案。