Perl 实现简单的进度条

4428阅读 12评论2011-03-23 neobilly
分类:Python/Ruby

今天,看到一个比较有意思的进度条,于是想要模仿一下,这个的原理其实就是,
构造一个长度固定的串,不断的用某种符号替换空格,其中用到了\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平台下测试通过



上一篇:Handle.pl
下一篇:lines2one 将文件压成一行

文章评论