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という名前のファイルがある場合、このチェックが必要です0。Perl はこれを偽の値と見なし、ループを早期に終了させます。

すべてを印刷する必要はありません。ディレクトリ エントリは、ディレクトリ、実行可能イメージ、または tarball の場合があります。ファイル テストは-T、ファイルがテキスト ファイルであるかどうかを推測しようとします。

clearPerl の を使用して外部コマンドを呼び出しsystemます。

最後に、外部headコマンドを使用して、各テキスト ファイルの最初の 20 行を出力します。

于 2013-03-07T14:07:41.800 に答える
1

clear画面をクリアするために出力する制御シーケンスがキャプチャされ、ディスプレイに送信されるのではなくプログラムに戻されるため、は機能していません。

試す

print `clear`

また

system('clear')

代わりは

于 2013-03-07T14:44:29.950 に答える
0

clearコマンドがサブシェルで実行されるため、提供したソリューションは機能しません。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 に答える