我想在同一个地方覆盖我的所有打印结果。它不应该滚动。我想要它无限的时间。为此,我使用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 //
谢谢。
答案 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秒后才能看到。但是,输出的十六进制转储显示所有数据都已发送;它只是在打印换行符时才会在结尾发送。