sub do_stuff { sleep 2; # for the sake of the example .. } $|=1; # turn off buffering, or you may never see what you write ... my @v = (1, 3, 10, 20); while (@v) { printf "\r%2d", shift @v; do_stuff(); }