If you're willing to stick with backspace and carriage return, this really isn't a hard hack at all. Here's a twirly-bob:
{
my $p=0;
$|=1;
sub tick {
print substr(qq{|/-\\|/-\\}, $p++, 1), "\b";
$p=0 if ($p > 8);
}
}
Just call tick repeatedly and the thing will spin. Or a percentage meter:
{
my $bar=qq{0%..........50%..........100%};
$|=1;
sub bar {
local $_=$bar;
substr($_, $_[0]/100*length($_), 1)="|";
print "$_\r";
}
}
Just call bar with a number between 1 and 100 to indicate how complete things are.