2010-11-17 3 views

ответ

3

Я не знаю, почему 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(); 
+0

Я полагаю, что я читал что-то неправильно. Не помню, где. Поэтому я буду придерживаться Term :: Screen и использовать систему («clear») в качестве резервной копии. –

1

Не знаю, почему вы хотите использовать 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 ([email protected]) { #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?

+0

Потому что Term :: ReadKey уже в скрипте. –

Смежные вопросы