Uso de Time :: HiRes para necesidades de temporización inferiores a un segundo, de varias formas
use warnings;
use strict;
use feature 'say';
use Time::HiRes qw(sleep);
STDOUT->autoflush(1); # or $| = 1; my $tot_sleep = 0;
# Print dots
print "Loading ";
while (1) {
$tot_sleep += sleep 0.1; print "."; last if $tot_sleep >= 2;
}
say " done\n"; $tot_sleep = 0; # Print "spinning" cursor while waiting print "Loading ... "; WAIT: while (1) { for (qw(- \ | /)) { print; $tot_sleep += sleep (0.1); print "\b";
last WAIT if $tot_sleep >= 2; } } say "\b done\n"; # Print (overwrite) percentile completed (if you know the job size) my $tot_percent = 0;
while ($tot_percent < 100) { $tot_percent += 5;
print "Loading ... $tot_percent%\r";
sleep 0.1;
}
say "\n";
Simulo la "finalización" (de la carga) sumando esperas a 2 segundos. Por tanto, las if
comprobaciones de este tiempo representan comprobaciones de si se completó la "carga", qué presumiblemente se puede hacer en ese punto del código (si es un hilo / proceso separado, o si este código se ejecuta en un proceso bifurcado).
Para un "spinner" quizás más agradable puede usar
use Time::HiRes qw(sleep);
use utf8;
use open qw(:std :encoding(UTF-8));
STDOUT->autoflush(1);
print "Waiting ... ";
WAIT: {
my $tot_sleep;
while (1) {
for ('◑', '◒', '◐', '◓') {
print; $tot_sleep += sleep 0.1; print "\b"; last WAIT if $tot_sleep >= 5;
}
}
};
say "\b done";
Idea para símbolos tomados de Term :: Spinner :: Color .
Tales "hilanderos", por supuesto, no dan pistas visuales de cuánto tiempo esperan (ed), como hacen los puntos.