Какой лучший способ очистить экран в Perl?

В идеале что-то кроссплатформенное.

8 ответов

Решение

CPAN, вероятно, лучший путь. Посмотрите на Term:: Screen: Uni:

require Term::Screen::Uni;
my $scr = new Term::Screen::Uni;

$scr->clrscr()
print "\033[2J";    #clear the screen
print "\033[0;0H"; #jump to 0,0

Я обычно использую Term:: ANSIScreen из CPAN, который дает мне все виды полезных функций, связанных с консолью.

use Term::ANSIScreen qw(cls);
cls();

В OS X и Linux вы можете использовать следующую команду Perl:

system("clear");

Не знаю, что такое эквивалент под Windows.

Изменить: Windows эквивалент:

system("cls");

Из ответа perlfaq8 на Как очистить экран:


Чтобы очистить экран, вам просто нужно распечатать специальную последовательность, которая сообщает терминалу очистить экран. Если у вас есть эта последовательность, выведите ее, когда хотите очистить экран.

Вы можете использовать модуль Term::ANSIScreen, чтобы получить специальную последовательность. Импортируйте функцию cls (или тег: screen):

use Term::ANSIScreen qw(cls);
my $clear_screen = cls();

print $clear_screen;

Модуль Term:: Cap также может получить специальную последовательность, если вы хотите иметь дело с низкоуровневыми деталями управления терминалом. Метод Tputs возвращает строку для данной возможности:

use Term::Cap;

$terminal = Term::Cap->Tgetent( { OSPEED => 9600 } );
$clear_string = $terminal->Tputs('cl');

print $clear_screen;

В Windows вы можете использовать модуль Win32::Console. После создания объекта для выходного дескриптора файла, на который вы хотите повлиять, вызовите метод Cls:

use Win32::Console;

$OUT = Win32::Console->new(STD_OUTPUT_HANDLE);
$OUT->Cls;

Если у вас есть программа командной строки, которая выполняет эту работу, вы можете вызывать ее в кавычках, чтобы захватить все, что она выводит, чтобы вы могли использовать ее позже:

$clear_string = `clear`;

print $clear_string;

Если вы говорите о терминале, я бы использовал что-то вроде библиотеки Curses для этого.

Есть хороший модуль Curses для доступа к нему, который вы можете использовать так:

perl -MCurses -e '$win=new Curses;$win->clear()'

Поддержка Linux и Windows:

      system($^O eq 'MSWin32'?'cls':'clear');

Я не согласен с вышеизложенным

  1. Подключение дополнительных модулей = Увеличивает поверхность атаки.
  2. Уменьшите количество выполняемого кода.
  3. Рефакторинг кода.

      #!/usr/bin/perl -w
use strict;

my
( $over, $cleaning );
( $cleaning ) = qq([J\033[H\033[J);
( $over ) = <<EOF;
 1. Connecting additional modules = Increase the attack surface.
 2. Reduce the Amount of Running Code.
 3. Code refactoring.
EOF

print ($cleaning.$over);

__END__
Другие вопросы по тегам