Можно ли очистить терминал с помощью Term :: ReadKey? - PullRequest
0 голосов
/ 17 ноября 2010

Есть ли способ сделать это с помощью Term :: ReadKey-module?

#!/usr/bin/env perl
use warnings;
use 5.012;
use Term::Screen;

say( "Hello!\n" x 5 );
sleep 2;

my $scr = Term::Screen->new();
$scr->clrscr();

Ответы [ 2 ]

3 голосов
/ 17 ноября 2010

Я не знаю, почему Term :: ReadKey предоставит такую ​​функцию или если она это сделает Но как насчет:

#!/usr/bin/env perl
use strict; use warnings;

*clrscr = $^O eq 'MSWin32'
        ? sub { system('cls') }
        : sub { system('clear') };

print "Hello\n" for 1 .. 5;
sleep 2;
clrscr();
1 голос
/ 18 ноября 2010

Не уверен, почему вы хотите использовать Term::Readkey для очистки экрана. Это определенно не имеет такой возможности. Вы пытаетесь использовать что-то, что является частью стандартной установки Perl? Вы можете использовать Term :: Caps, который является частью стандартной установки Perl. К сожалению, для этого требуется, чтобы файл Termcaps был в системе, а в Windows его нет.

use Term::Cap;

#
# Use eval to catch the error when TERM isn't defined or their is no
# Termcap file on the system.
#
my $terminal;
eval {$terminal = Term::Cap->Tgetent();};

#
# Use 'cl' to get the Screen Clearing sequence
#

if ($@) {  #Most likely a Windows Terminal
    system('cls');            #We really should be doing the 2 line below
    # my $clear = "\e[2J";    #But, it doesn't seem to work.
    # print "$clear";         #Curse You! I'll get you yet Bill Gates!
} else {   #A Real Computer
    my $clear = $terminal->Tputs('cl');
    print "$clear";
}
print "All nice and squeeky clean!\n";

Я попытался распечатать последовательность ANSI Escape, если это был терминал Windows, но, похоже, он не работает.

Я ненавижу делать системные вызовы, потому что существует угроза безопасности. Что если кто-то изменит вам команду cls?

...