今天,看到一个比较有意思的进度条,于是想要模仿一下,这个的原理其实就是,
构造一个长度固定的串,不断的用某种符号替换空格,其中用到了\r,下面是代码
#源代码 bar.pl
#!/usr/bin/perl
for(my $i = 0; $i < 30; $i ++){
print "\r";
my $j;
for( $j = 0; $j < $i; $j ++)
{
print "+";
}
for( $j = $j; $j < 30 ; $j ++ )
{
print " ";
}
print $i;
sleep(1);
}
print "\n";
运行之后,结果怎么样呢,
等了30秒,最后直接显示
+++++++++++++++++++++++++++++ 29
网上搜了一下,原来是由于perl的输出,是以\n标识结束的,
如果没有\n,那么它会放到缓存里,到了最后一块输出,所以,就
成了只有最后一行的情况。
所以代码改成了
#!/usr/bin/perl
for(my $i = 0; $i < 30; $i ++){
print "\r";
my $j;
for( $j = 0; $j < $i; $j ++)
{
print "+";
}
for( $j = $j; $j < 30 ; $j ++ )
{
print " ";
}
print $i;
print "\n\b";
sleep(1);
}
print "\n";
这样就好了,print"\n"之后,马上又退格"\b",这样就可以了,在Linux平台下测试通过
阅读(4325) | 评论(12) | 转发(1) |