# This example script will show almost the simplest possible situation. # # We will perform 'some work', but we can't (or don't want to) quantify the # amount. # use strict; use warnings; use ProgressMonitor::Stringify::ToStream; use ProgressMonitor::Stringify::Fields::Spinner; # Make sure output is unbuffered # $| = 1; # Here we set up a very simple monitor, with one field only - a classic 'spinner'. # this shows progress, but can not indicate how much remains so it is primarily # useful for situations where the amount of work is unknown. # my $monitor = ProgressMonitor::Stringify::ToStream->new({fields => [ProgressMonitor::Stringify::Fields::Spinner->new,],}); # All monitors must be told to 'prepare'...unless we have no preparatory work to # do. In that case we can skip the prepare() call and go directly to begin() # # Monitors in the 'prepare' can be 'ticked' if desired; this state is intended # for the common situation of first finding out the amount to do which typically # can take a non-negligible amount of time, but little in comparison to the # full work. # # Here we have no amount to compute, so we just prepare and move on (and we # could skip the call altogether if we wished). # $monitor->prepare(); # After the prepare phase, we must tell the monitor that we are beginning the # real work. # If we know the amount we're going to do, we should tell it. Here, we don't know # so we pass no amount, effectively saying 'unknown'. # $monitor->begin; # Work for a random time, simulating that we didn't know beforehand how much it was. # my $work = rand(10) + 3; for (1..$work) { # for every piece of isolated work we do, run tick # $monitor->tick; # some time passing # sleep(1); } # finally, we must tell the monitor that we're done, this way it can render # a last report # $monitor->end();