0

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

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

我还尝试在两个打印语句中使用 \r ,但它只更新同一位置的最后一个打印语句。

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 //

谢谢你。

4

1 回答 1

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 秒之后。但是,输出的十六进制转储显示所有数据都已发送;它只是在打印换行符时才在最后发送。

于 2013-09-28T21:12:19.447 回答