如何删除或更改 perl 上最后一次打印的显示?

min*_*666 4 perl

我想要做什么打印出一个字符串,然后在进行一些背景检查后,更改之前所说的字符串?

所以这里是它最初的样子:

#
Loading design modules....please wait.
Run Code Online (Sandbox Code Playgroud)

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

#
Design module loaded!
Run Code Online (Sandbox Code Playgroud)

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

#!/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!";
Run Code Online (Sandbox Code Playgroud)

Dav*_*oss 5

使用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!";
Run Code Online (Sandbox Code Playgroud)

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

Design module loaded!s....please wait
Run Code Online (Sandbox Code Playgroud)

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

#!/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!";
Run Code Online (Sandbox Code Playgroud)