Как избежать тени предыдущей напечатанной строки, перезаписывая различные выражения, используя \ r в perl? - PullRequest
0 голосов
/ 27 февраля 2012

Я разрабатываю одно консольное приложение, используя сценарий perl.Так как я печатаю статус процесса, например, «25% завершено», «33,33% выполнено» и т. Д. В этом я использую \ r для печати выписки в oneline.Но при выполнении также существует тень предыдущего напечатанного оператора, что приводит к путанице.Как избежать этой тени предыдущего печатного заявления.Пример кода был написан ниже.

use strict;
$|=1;

my $length=7;
my $progress_limit=100/$length;
 my $progress;
for(my $i=1;$i<=$length;$i++){
 $progress=$progress_limit*$i;
 print "Process completion status\: ".$progress." % Completed \r";

}

Спасибо ...

1 Ответ

3 голосов
/ 27 февраля 2012

Использовать строку фиксированной длины. sprintf - отличный способ для этого.

use strict;
use warnings FATAL => 'all';
use IO::Handle qw(); STDOUT->autoflush(1);

for my $i (1..7) {
    printf "Status: %3d%% completed\r", $i * 100/7;
    sleep 1;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...