如何避免以前打印线的阴影,同时使用perl中的\ r覆盖各种语句?

时间:2012-02-27 10:31:53

标签: perl

我正在使用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 个答案:

答案 0 :(得分:3)

使用固定长度的字符串。 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;
}