Author image Paul Evans


IO::Term::Status - print log lines to a terminal with a running status bar


   use IO::Term::Status;

   my $io = IO::Term::Status->new_for_stdout;

   $io->set_status( "Running" );

   my @items = ...;

   foreach my $idx ( 0 .. $#items ) {
      $io->set_status( sprintf "Running | %d of %d", $idx+1, scalar @items );

      my $item = $items[$idx];
      $io->print_line( "Processing item $item..." );

   $io->set_status( "" );   # Clear the status line before exiting


This module provides a subclass of IO::Handle for maintaining a running status display on the terminal. It presumes the terminal can handle basic ANSI control characters (thus is not suitable for printing to log files, etc).

The "status bar" consists of a single additional line of text, printed below the current log of output. More lines of regular log can be printed using the "print_line" method, which maintains the running status bar below the output.

With String::Tagged

If the String::Tagged::Terminal module is available, then the status string can set to an instance of String::Tagged, obeying the String::Tagged::Formatting tag conventions. This will be converted to terminal output.

As an extra convenience, whatever the prevailing background colour is at the end of the string will be preserved for line-erase purposes, meaning that colour will extend the entire width of the status bar line.



   $io = IO::Term::Status->new

Constructs a new IO::Handle subclassed instance of this type.


   $io = IO::Term::Status->new_for_stdout

Constructs a new instance wrapping the STDOUT filehandle, with autoflush turned on. This is usually what you want for printing regular output to the controlling terminal.


   $io->print_line( @args )

Prints a new line from the given arguments, joined as a string. @args should not contain the terminating linefeed.

This line is printed above any pending partial line.


   $io->more_partial( $more )

Adds more text to the pending partial line displayed at the bottom, after any complete lines.


   $io->replace_partial( $more )

Replace the content of the pending partial line displayed at the bottom.


   $io->finish_partial( $more )

Adds more text to the pending partial line then turns it into a complete line that gets printed.


   $io->set_status( $status )

Sets the status message string.


Paul Evans <>