在perl中的同一位置覆盖所有打印件

时间:2013-09-28 20:43:39

标签: perl unix

我想在同一个地方覆盖我的所有打印结果。它不应该滚动。我想要它无限的时间。为此,我使用while(1)并且它正常工作。但问题是每次我打印语句时,它都向下滚动,我想改变。 我想要它打印它,或者你可以说在同一个地方覆盖它。

有些人可以帮我解决这个问题吗?

我也尝试在两个print语句中使用\ r \ n,但它只更新了同一个地方的最后一个print语句。

while(1)
{
.... // some lines of code //

print("\n******** Interrupts *********\n");
for($k=0; $k<$t_intr; $k++)
{
    $intr_diff = $total_intr_curr[$k] - $total_intr_prev[$k];
    #push(@intr_diff_arr,$intr_diff);
    print("Intr : $intr_diff\n"); // want to update this print at same place //

}

print("\n******** Context switches *********\n");

for($l=0; $l<$t_ctxt; $l++)
{
   $cntx_min = 0;
    $ctxt_diff = $total_ctxt_curr - $total_ctxt_prev;
    push(@ctxt_diff_arr,$ctxt_diff);
    $min = min @ctxt_diff_arr;
    $max = max  @ctxt_diff_arr;
    print("Ctxt : $ctxt_diff Minimum : $min Maximum : $max\n"); // want to update this print also at same place //
}

}// infinite while loop end //

谢谢。

1 个答案:

答案 0 :(得分:1)

除非您的终端设置通过将CR映射到NL来做一些有趣的事情,否则这应该有效:

#!/usr/bin/env perl
use strict;
use warnings;

$| = 1;

foreach my $i (1..20)
{
    print "\rLine $i";
    sleep 1;
}
print "\n";

请注意$| = 1;设置;这是使输出出现的必要条件。当它被删除时,我只能看到最后一行输出,而且只有20秒后才能看到。但是,输出的十六进制转储显示所有数据都已发送;它只是在打印换行符时才会在结尾发送。