http://www.perlmonks.org?node_id=313272


in reply to RE: A whirleygig for a progress indicator for scripts
in thread A whirleygig for a progress indicator for scripts

Taking it one step further here is a repackage of btrott's version that takes an argument to choose from an array of weird spinners.

# main my $whirley = Whirley->new(1); while (1) { sleep 1; print STDERR "please wait: ", $whirley->(), "\r"; } package Whirley; sub new { my $type = shift; my $number = shift; my $class = ref $type || $type; my $WHIRLEY_COUNT = -1; my @whirleyhash = ( [qw(- \ | / )], [map chr, qw/32 176 177 178 219 178 177 176/], [qw(>--- ->-- -->- ---> ---* --- ---< --<- -<-- <--- *---)], [qw(_o_ \o/ _O_ \O/)], [qw/. .o .oO .oO(zzz) .oO(ZZZ) /], [ '(^_^ )','( ^_^)'], [ '(^_^ )','( ^_^)','( -_-)', '(-_- )' ] ); my @whirley = @{$whirleyhash[$number]}; my $self = sub { $WHIRLEY_COUNT = 0 if ++$WHIRLEY_COUNT == @whirley; return $whirley[$WHIRLEY_COUNT]; }; bless $self, $class; }

Replies are listed 'Best First'.
Re^3: A whirleygig for a progress indicator for scripts
by Wire64 (Initiate) on May 16, 2009 at 17:42 UTC
    Is there anyway i can use Whirley with File::Copy ?

    I want to show a progress meter (percentage) while moving a file.
    I found http://www.perlmonks.org/?node=File%20copy%20progress. but that doesn't use File::Copy and dont know if it working for large files.
    Or can i do something like;

    my $sizetarget= (-s $destination); my $sizesource= (-s $source); my $percentage=""; while (move($source,$destination) || print "$!\n") { $sizetarget = (-s $destination); $percentage = ($sizetarget / $sizesource)*100; print "[$percentage\%]\r"; }
    hmm nope that doesnt work.. anyways you get my point.
    Hope anyone can give me an example or a hand :).
    greets,
    Wire64

      No. From looking at the File::Copy source code, it provides no progress callback. You could try to override CORE::sysread and/or CORE::syswrite, which File::Copy uses in its inner loop. Or just do the progress based on the number of files.