在Perl中清除屏幕的最佳方法是什么?

时间:2008-10-13 15:13:10

标签: perl

理想情况下,跨平台的东西。

8 个答案:

答案 0 :(得分:29)

print "\033[2J";    #clear the screen
print "\033[0;0H"; #jump to 0,0

答案 1 :(得分:15)

CPAN可能是最好的方式。看看Term::Screen:Uni

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

$scr->clrscr()

答案 2 :(得分:10)

我通常使用CPAN中的Term::ANSIScreen,它为我提供了各种与控制台相关的有用功能。

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

答案 3 :(得分:7)

perlfaq8回答How do I clear the screen


要清除屏幕,您只需打印告诉终端清除屏幕的特殊序列。完成该序列后,在想要清除屏幕时输出它。

您可以使用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;

答案 4 :(得分:6)

如果你在谈论一个终端,我会使用像Curses lib这样的东西。

有一个很好的Curses模块可以访问它,你可以这样使用:

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

答案 5 :(得分:6)

在OS X和Linux下,您可以使用以下Perl命令:

system("clear");

不知道Windows下的等效内容。

编辑:Windows等效于:

system("cls");

答案 6 :(得分:1)

我不同意以上内容

  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__
<头>
FOO 酒吧
\033 代表 ESC ANSI 值 27
[J 从当前行向下屏幕擦除屏幕
[H 将光标移动到起始位置

答案 7 :(得分:1)

支持 Linux 和 Windows:

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