in reply to Re: Writing to same line in STDOUT
in thread Writing to same line in STDOUT

...but you'd better make sure that you're actually writing to a terminal:

#!/usr/bin/perl use strict; my $in = shift || '/usr/share/dict/words'; my $running_on_terminal = -t STDOUT; my $last_word_length; open IN, $in or die "Cannot open $in for input: $!\n"; while( <IN> ) { chomp; if ($running_on_terminal) { my $length_diff = $last_word_length - length($_); $length_diff >= 0 or $length_diff = 0; print ("\rProcessing $_..." . (" " x $length_diff) . ("\b" x $length_diff)); $last_word_length = length($_); } # do something with $_ } print "\n" if ($running_on_terminal); close IN;

caveat: this code still assumes the user's terminal is wide enough for any line we're going to print.

You might want to wrap it up into a module or object, so you can go:

my $pm = new ProgressMeter(-items => scalar @list); $pm->start; my $c; for my $item (@list) { $pm->update(++$c); } $pm->finish;

I wrote something like that once, but unfortunately it is owned by the company I wrote it for :-(