如何清理输出

时间:2013-03-07 14:00:16

标签: perl

我打开一个文件并在屏幕上打印一些数据,但我想在输出数据后清理屏幕,我使用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;

由于

4 个答案:

答案 0 :(得分: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阅读名称。如果您有一个名为defined的文件,则需要进行0检查,Perl认为该文件为false值,并且会过早终止循环。

您不想打印所有内容。目录条目可以是目录或可执行映像或tarball。 -T文件测试尝试猜测文件是否是文本文件。

使用Perl的system调用外部clear命令。

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

答案 1 :(得分:1)

clear无效,因为它输出的用于清除屏幕的控制序列正在被捕获并返回到您的程序而不是被发送到显示器。

尝试

print `clear`

system('clear')

代替

答案 2 :(得分:0)

您提供的解决方案无效,因为clear命令是在子shell中执行的。我建议使用CPAN模块(支持多平台):Term::Screen::Uni

示例:

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

答案 3 :(得分:0)

使用system(),它有效。

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