2013-03-07 52 views
1

我打開一個文件並在屏幕上打印一些數據,但是我想在輸出數據後清理屏幕,我用的是clear;在程序中,但我沒有看到乾淨的效果。它不乾淨。有沒有 任何命令或功能可以讓我這樣做?如何清除輸出

我想看到的只包含一個文件,而不是看到一些屏幕上的一個文件的...

這是我的計劃

`ls > File_List`; 
open List , "<./File_List"; 
while(eof(List)!=1) 
{ 
     $Each = readline(*List); 
     chomp $Each; 

     print $Each; 
     print "\n"; 
     `clear`; 
     open F , "<./$Each"; 
     while(eof(F)!=1) 
     { 
       for($i=0;$i<20;$i++) 
       { 
         $L = readline(*F); 
         print $L; 
       } 
       last; 
     } 
     close(F); 
     sleep(3); 
     $Each = ""; 
} 
close List; 

感謝

+0

'使用嚴格的;使用警告;' – 2013-03-07 14:10:05

回答

1

clear不工作,因爲它輸出到清屏控制序列被捕獲並返回到您的程序,而不是發送到顯示器。

嘗試

print `clear` 

system('clear') 

代替

2

您的程序使用非慣用Perl。一個更自然的風格將是

#!/usr/bin/env perl 

use strict; 
use warnings; 
no warnings 'exec'; 

opendir my $dh, "." or die "$0: opendir: $!"; 

while (defined(my $name = readdir $dh)) { 
    if (-T $name) { 
    system("clear") == 0 or warn "$0: clear exited " . ($? >> 8); 
    print $name, "\n"; 
    system("head", "-20", $name) == 0 or warn "$0: head exited " . ($? >> 8); 

    sleep 3; 
    } 
} 

而不是寫名字的列表到另一個文件中,直接與opendirreaddir讀的名字。如果你有一個名爲0的文件,Perl認爲這是一個錯誤的值,並且會過早地終止循環,所以需要檢查defined

你不想打印的一切。目錄條目可以是目錄或可執行映像或tarball。 -T文件測試嘗試猜測文件是否爲文本文件。使用Perl的system調用外部命令clear

最後,使用外部的head命令打印每個文本文件的前20行。

+0

感謝它的工作... – user2131116 2013-03-07 14:13:57

+0

不客氣。我很高興它有幫助。 – 2013-03-07 14:15:37

+0

似乎很遺憾放棄'ls'而採用'opendir' /'readdir',然後爲了使用'head'而掏空。 – Borodin 2013-03-07 14:37:14

0

您提供的解決方案不起作用,因爲clear命令在子外殼中執行。我建議使用CPAN模塊(多平臺支持):Term::Screen::Uni

例子:

use Term::Screen::Uni; 
my $screen = Term::Screen::Uni->new; 
$screen->clrscr; 
+0

這與子shell的存在沒有任何關係。問題是,'\'clear \''的輸出不會進入顯示器。 – Borodin 2013-03-07 14:46:16

0

使用system(),它的工作原理。

system("ls > File_List"); 
system("clear;");