in reply to updating stdout

nattimonk:

In general, to display status on long-running operations, I use something like this:

print " \r", $status; I often put extra blanks at the beginning when my status value isn't necessarily going to always be the same length or longer for each successive value. That way extra characters from a previous status value doesn't hang around.

However, in order to get the output to work the way you intend, you also need to ensure that the value is written immediately, otherwise your status lines may seem to hang or display in "bursts". So I also turn on automatic flushing on the output file handle. So here's a trivial example:

#!/usr/bin/perl use warnings; use strict; $|=1; # Turn on automatic flushing on stdout for (0..1000) { my $status = substr(rand,0,5); print " \r", $status; sleep 5; }
--roboticus

Replies are listed 'Best First'.
Re^2: updating stdout
by klekker (Pilgrim) on Feb 17, 2007 at 18:59 UTC
    Yes, dont't forget the flushing! :)

    But if you want to avoid extra blanks, I recommend printf and perhaps to "cut" your output. Like
    printf( "%-60s\r", substr $line, -60 );

    k