| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 | #!/usr/bin/perl -w
use strict;
use warnings;
use Getopt::Long;
my $opts;
$opts->{no_header}  = 0;
$opts->{delay}      = 2;
$opts->{frames}     = "-/|\\";
GetOptions (
    "no-header" => \$opts->{no_header},
    "usage"     => \$opts->{usage},
    "help"      => \$opts->{usage},
    "delay=i"   => \$opts->{delay},
    "frames=s"  => \$opts->{frames},
) or &usage;
&usage if $opts->{usage};
sub usage {
    print "usage: watchdump.pl --no-header --delay=SEC --frames=CHARS FILE\n";
    exit 0;
}
my @frames      = split "", $opts->{frames};
my $frame_num   = 0;
sub get_frame {
    my $frame = $frames[$frame_num];
    $frame_num++;
    $frame_num = 0 if $frame_num > $#frames;
    return $frame;
}
sub clear {
    system "cls"    if -d "c:\\windows";
    system "clear"  if -f "/bin/ls";
}
my $file = shift @ARGV or &usage;
while (1) {
    &clear;
    system "title $file" if -d "c:\\windows";
    printf "[%s] watching: %s\n%s\n", &get_frame(), $file, "=" x 80
        unless $opts->{no_header};
    if (open my $fh, "<", $file) {
        print join "", <$fh>;
        close $file;
    } else { warn "cannot open $file: $!\n"; next; }
} continue {
    sleep $opts->{delay};
}
 |