我想为我的脚本创建一个非常简单的进度条.到目前为止,我已经有了这个,它的确有效.但是,我无法让它成为100的百分比.我的代码如下,它基本上为每5个条目生成一个点@entries.
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++;
}
}
Run Code Online (Sandbox Code Playgroud)
我希望有一些产生总是固定数量的点的东西,无论在哪个条目总数@entries.
假设我们想要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";
Run Code Online (Sandbox Code Playgroud)
请注意,我们通过在每次迭代时重新计算每个项目的点数来避免舍入误差.在\r将光标移动到该行的开始,所以在现有的点将每次被覆盖.如果$dots迭代之间的值没有变化,您可以轻松跳过打印.