1

我打开一个文件并在屏幕上打印一些数据,但是我想在输出数据后清理屏幕,我使用clear;在程序中,但我没有看到 clean 的效果。它没有清理。是否有任何命令或功能可以让我这样做?

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

这是我的程序

`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

4 回答 4

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;
  }
}

不要将名称列表写入另一个文件,而是直接使用opendir和读取名称readdirdefined如果您有一个名为 的文件,则检查是必要的,0Perl 认为该文件是错误值并会过早终止循环。

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

clear使用 Perl调用外部命令system

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

于 2013-03-07T14:07:41.800 回答
1

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

尝试

print `clear`

或者

system('clear')

反而

于 2013-03-07T14:44:29.950 回答
0

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

例子:

use Term::Screen::Uni;
my $screen = Term::Screen::Uni->new;
$screen->clrscr;
于 2013-03-07T14:08:15.480 回答
0

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

system("ls > File_List");
system("clear;");
于 2013-03-07T14:13:56.033 回答