Category: Utility Scripts
Author/Contact Info Ed Halley <> This program is free software; you can redistribute it and/or modify it under the same terms as Perl
Description: Some commands give visual feedback that is either feast or flood. They either remain blissfully silent while they work on a long task, or they blather endlessly about every step of their progress.

Many times, it'd be handy to have feedback somewhere in between. You can still see it's running, but it doesn't scroll your terminal out of sight.

This is essentially a Perl one-liner, written to a script. It's trivial. It's not about how tough the task is, but whether you find it useful.

Update: printf and --keep suggestions implemented


# Copyright (C) 2001-2003 Ed Halley

=head1 NAME

peek - eat lines of standard input; output a one-line preview instead


    tar jcvf home.tar.bz2 /home | peek


The peek process reads line-oriented text from the standard input, and
outputs each line atop each other on the standard output.  This is use
for reducing visual clutter in large list-oriented processing while
keeping some visual feedback of the progress.

There are a few options to customize the style, but the defaults are
usually quite sufficient.



use Getopt::Long;

use warnings;
use strict;

my $wide = 79;
my $keep = 0;

my %options =
    ( 'wide|width=i' => \$wide,
      'keep!' => \$keep,

GetOptions(%options) or die;

$wide = 0 if $wide < 1;


$| = 1;
while (<>)
    tr{\n\t}{\r };
    printf "%-${wide}.${wide}s\r", $_;
print ' 'x$wide, "\r" if not $keep;
print "\n" if $keep;



=head1 OPTIONS

=over 4

=item B<--width>=[integer]

Truncates the output lines to the given width, so as to avoid any line
wrapping issues.  Default is 79 characters wide.

=item B<--keep>

The final line of output is left visible on the display.

=head1 BUGS

The --width should default to the current terminal width, if it can be

This animation assumes that a carriage return (as opposed to a newline
+ or
linefeed) will not erase the current line, but will return the output
cursor to the beginning of the current line.  This is a common convent
and holds true for many POSIX-styled terminals, but may not work for a
output devices.

=head1 LICENSE

Copyright (C) 2001-2003  Ed Halley  <>

This program is free software; you can redistribute it and/or modify i
under the same terms as Perl itself.  For details on the Perl Artistic
License, read the F<>