在 perl 中加载代码时出错

errer in code loading in perl

什么问题我不想请稍等再重复

#!/usr/bin/perl
Win32::Console;
use strict;
use warnings;
$|++; # turn off output buffering;

my @chars = qw(| / - \ );

my $i = 0;
my $v = "Please Wait";
print $chars[$i];

while (1) {
  sleep 1;
  print "$v\b", $chars[++$i % @chars];
}

什么问题我不想请稍等再重复

您将 print "Please wait" 放入 while 循环中,因此它会继续打印。在 $chars 打印之后也使用 \b 而不是在 Please wait

之后
#!/usr/bin/perl
use Win32::Console;
use strict;
use warnings;
$|++; # turn off output buffering;

my @chars = qw(| / - \ | / - \);

my $i = 0;
my $v = "Please Wait";
print $v;
while (1) {
    sleep 1;
    print $chars[++$i % @chars],"\b";
}

如果您打算使用微调器,另一种选择是您可以摆脱 sleep 1; 并将其替换为 select undef, undef, undef, miliseconds。如果像下面这样使用,微调器会又好又快。

#!/usr/bin/perl
use Win32::Console;
use strict;
use warnings;
$|++; # turn off output buffering;

my @chars = qw(| / - \ | / - \);

my $i = 0;
my $v = "Please Wait ";
print $v;
while (1) {
    select undef, undef, undef, 0.05;
    print $chars[++$i % @chars],"\b";
}

编辑,根据您的评论请求改用点。 如果你想 运行 Please wait... 然后去掉 \b

#!/usr/bin/perl
use Win32::Console;
use strict;
use warnings;
$|++; # turn off output buffering;

my @chars = qw(.);

my $i = 0;
my $v = "Please Wait";
print $v;
while (1) {
    sleep 1;
    print $chars[++$i % @chars];
}

最后,这根本不是一个好方法,但是对于与您在评论中提到的非常相似的等待,这也可以。

use strict;
use warnings;

$|++;
my @chars = qw( . | | | . .);
print "Please Wait ";
my $i = 0;
while (1) {
    select undef, undef, undef, .15;
    printf $chars[++$i % @chars];
    select undef, undef, undef, .15;
    printf $chars[++$i % @chars];
    select undef, undef, undef, .15;
    printf $chars[++$i % @chars];
    printf "\b\b\b";
}

尽管 运行ning 时看起来很整洁 :)