perl的进度线

时间:2014-04-01 16:15:04

标签: perl

我想为我的脚本创建一个非常简单的进度条。到目前为止,我已经得到了这个,并且它有效。但是,我无法将其作为100的百分比。我的代码如下,它为@entries中的每5个条目生成一个点。

my $total_entries = @entries; 
my $count = 0; 
my $count_tens = $total_entries/0.2;            
$count_tens = sprintf ('%d',$count_tens);

foreach (@entries){

    # do some stuff #

    for (1 .. $total_entries){              
        if ($count == $count_tens){
            print ".";
            $count = 0;
        }   
    $count++;
    }
}

无论@entries中的条目总数如何,我都希望能够生成固定数量的点。

2 个答案:

答案 0 :(得分:5)

假设我们想要80个点。然后:

my $number_of_dots = 80;
my @items = 0 .. 20; # or something
my $items_per_dot = @items / $number_of_dots;

STDOUT->autoflush(1);  # print everything out immediately

for my $i (0 .. $#items) {
    my $dots = $i / $items_per_dot;
    print "\r", "." x $dots;
    sleep 1; # do something
}
print "\n";

请注意,我们通过在每次迭代时重新计算每个项目的点数来避免舍入错误。 \r会将光标移动到行的开头,因此每次都会覆盖现有的点。如果$dots值在迭代之间没有变化,则可以轻松跳过打印。

答案 1 :(得分:4)

您可能希望使用已经编写,测试和调试的现有代码,而不是重写方向盘。

http://metacpan.org/pod/Term::ProgressBar