Какой лучший способ очистить экран в 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');
Я не согласен с вышеизложенным
- Подключение дополнительных модулей = Увеличивает поверхность атаки.
- Уменьшите количество выполняемого кода.
- Рефакторинг кода.
#!/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__