Мой первоначальный ответ был частично неверным, я исправил его.
Модуль Term :: Cap предназначен для управления простой устаревшей базой данных, связанной с терминалами. Из описания:
Это низкоуровневые функции для извлечения и использования возможностей из
база данных возможностей терминала (termcap).
Эта база данных может отсутствовать в современной реализации Unix (например, Linux). Модуль perl использует infocmp -C
для получения информации о терминале, если он не может найти файл базы данных.
Я думаю, что ваш пример основан на документации, которая вводит в заблуждение при использовании $FH
. Оператор print
в perl просто идет к стандартному выводу и будет лишен любого позиционирования, потому что 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
проверяет term inal, который вы используете способности cap , которые вы используете в программе, представленной короткими кодами символов termcap . В вышеприведенной программе: cl
для очистки экрана и домашнего курсора и cm
для позиционного курсора. Он выдаст исключение и завершит программу, если терминал не поддерживает указанный список.
Древние высокоуровневые библиотеки в этом пространстве для unix назывались curses и использовались для "полноэкранных" команд, таких как vi
. Современная версия этого - ncurses . Я бы посоветовал поискать проклятия на CPAN , чтобы найти что-то, что имеет функции, подходящие для вашего варианта использования.