I am trying to print progress in % in command prompt. But it is not working properly.
I want to print the progress as :: Status 10% Completed when 20% will complete it will show Status 20% Completed in that same place not in new line. Could you please help me.
Code::
$count++;
$per=($count/$total)*100;
print "\nStatus: $per Completed.\r";
sleep 1;
The module Term::ProgressBar seems to be able to do what you're after.
Note, I haven't tried it.
Edit Well, out of curiosity, I have now tried a small script:
use warnings;
use strict;
use Term::ProgressBar;
my $total = 50;
my $progress_bar = Term::ProgressBar->new($total);
for my $i (1 .. $total) {
sleep (1);
$progress_bar->update($i);
}
It won't exactly print what you asked (eg Status nn% completed
), instead, it does print a real progress bar, something like
10% [===== ]
Nevertheless, it seems to most simple and straight forward solution.
You can do something like this:
use strict;
use warnings;
use Time::HiRes qw(usleep);
local $| = 1;
my @nums = 1 .. 20;
foreach my $c (@nums) {
print "$c";
usleep(100000);
print ("\b" x length($c));
}
print "\n";
Small modification to the original code: \n and \r are removed and added autoflush and "\033[G" and \033[J
$|=1; #autoflush
$count = 0;
$total = 100;
while ($count != $total) {
$count++;
$per=($count/$total)*100;
print "\033[JStatus: ${per}% Completed."."\033[G"; # man console_codes, ECMA-48 CSI sequences, "CHA"
sleep 1
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With