首页 > 解决方案 > 如何在 perl 上删除或更改最后一次打印的显示?

问题描述

我试图做的是打印出一个字符串,然后经过几次背景检查,更改之前所说的字符串?

所以这是它最初的样子:

#
Loading design modules....please wait.

然后经过几次背景检查后,它将删除“正在加载设计模块....请稍候”。然后在不清除整个 CLI 屏幕的情况下将其更改为以下内容:

#
Design module loaded!

到目前为止,这是我的代码:

#!/usr/bin/perl

use strict;
use warnings;
use diagnostics;

use feature 'say';
use feature 'switch';

use IO::Socket;
use Scalar::Util qw(looks_like_number);
use Term::ANSIScreen qw/:cursor :screen/;

$| = 1;
print "Loading design modules....please wait";
sleep(5);
say "Design module loaded!";

标签: perl

解决方案


用于savepos()保存光标的位置并loadpos()返回到该保存的位置。

这是第一次尝试:

#!/usr/bin/perl

use strict;
use warnings;
use feature 'say';

use Term::ANSIScreen ':cursor';

$| = 1;

savepos;

print "Loading design modules....please wait";
sleep 5;
loadpos;
say "Design module loaded!";

但是由于第二个字符串比第一个字符串短,我们最终会看到两个字符串的位:

Design module loaded!s....please wait

最简单的解决方案可能是在打印第二个字符串之前打印一串空格来覆盖第一个字符串。

#!/usr/bin/perl

use strict;
use warnings;
use feature 'say';

use Term::ANSIScreen ':cursor';

$| = 1;

savepos;

print "Loading design modules....please wait";
sleep 5;
loadpos;
print ' ' x 37;
loadpos;
say "Design module loaded!";

推荐阅读