簡體   English   中英

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

[英]What's the best way to clear the screen in Perl?

理想情況下,跨平台的東西。

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

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

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

$scr->clrscr()

我通常使用來自 CPAN 的Term::ANSIScreen ,它為我提供了各種有用的與控制台相關的功能。

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()'

我不同意上述

  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__
食品級 酒吧
\\033 代表 ESC ANSI 值 27
[J 從當前行下屏幕擦除屏幕
[H 將光標移動到起始位置

支持 Linux 和 Windows:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM