我想为我的脚本创建一个非常简单的进度条。到目前为止,我已经得到了这个,并且它有效。但是,我无法将其作为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
中的条目总数如何,我都希望能够生成固定数量的点。
答案 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)
您可能希望使用已经编写,测试和调试的现有代码,而不是重写方向盘。