$ perl -Mstrict -Mwarnings -e ' use Smart::Comments; for (1 .. 500) { ### Running... done qx{ls -l > /dev/null 2>&1}; } ' #### #!/usr/bin/env perl use strict; use warnings; my $CMD = q{ls -l > /dev/null}; for ([], [q{}], [q{dummy}], [$CMD, 10], [$CMD], [$CMD, 50]) { eval { run_with_progress(@$_); }; warn $@ if $@; } sub run_with_progress { print q{-} x 60, qq{\nStarting ...\n}; my ($cmd, $skip) = @_; die q{Nothing to run!} unless $cmd; $skip ||= 25; # Arbitrary my @sails = map { "\b$_" } qw{- \ | /}; my $sail = 0; { local $| = 1; print q{Running: }; for (0 .. 1000) { system $cmd and die qq{'$cmd' failed! $? : $!}; print $sails[$sail++ % @sails] if not $_ % $skip; } } print qq{\b*\nFinished.\n}; } #### $ pm_text_spinner_ryo.pl ------------------------------------------------------------ Starting ... Nothing to run! at ./pm_text_spinner_ryo.pl line 20. ------------------------------------------------------------ Starting ... Nothing to run! at ./pm_text_spinner_ryo.pl line 20. ------------------------------------------------------------ Starting ... Running: Can't exec "dummy": No such file or directory at ./pm_text_spinner_ryo.pl line 32. 'dummy' failed! -1 : No such file or directory at ./pm_text_spinner_ryo.pl line 32. ------------------------------------------------------------ Starting ... Running: * Finished. ------------------------------------------------------------ Starting ... Running: * Finished. ------------------------------------------------------------ Starting ... Running: * Finished. #### sub run_with_progress { use Smart::Comments; ### Starting ... my ($cmd, $skip) = @_; die q{Nothing to run!} unless $cmd; $skip ||= 25; # Arbitrary my @sails = map { ($_) x $skip } qw{- \ | /}; my $sail = 0; for (0 .. 1000) { ### Running: $sails[$sail++ % @sails] system $cmd and die qq{'$cmd' failed! $? : $!}; } ### Finished. no Smart::Comments; return; } #### $ pm_text_spinner_sc_spin.pl ### Starting ... Nothing to run! at ./pm_text_spinner_sc_spin.pl line 22. ### Starting ... Nothing to run! at ./pm_text_spinner_sc_spin.pl line 22. ### Starting ... Running: - Can't exec "dummy": No such file or directory at ./pm_text_spinner_sc_spin.pl line 29. 'dummy' failed! -1 : No such file or directory at ./pm_text_spinner_sc_spin.pl line 29. ### Starting ... ### Finished. ### Starting ... ### Finished. ### Starting ... ### Finished. #### sub run_with_progress { print q{-} x 60, qq{\nStarting ...\n}; my ($cmd, $skip) = @_; die q{Nothing to run!} unless $cmd; $skip ||= 25; # Arbitrary use Term::Spinner; my $spinner = Term::Spinner::->new(); print q{Running: }; for (0 .. 1000) { system $cmd and die qq{'$cmd' failed! $? : $!}; $spinner->advance() if not $_ % $skip; } $spinner->finish(); print qq{\nFinished.\n}; undef $spinner; return; }