my $pb = pb_fillup(,,); #### my $pb = pb_fillup(-s $file,'#',40); #### print $pb->(length $_); #### sub pb_fillup { my ($max,$char,$len) = @_; # init look&feel my $old_slen = -1; # init old showlength my $cur = 0; # init current length return sub { $cur += @_ ? shift : 1; my $slen = int $cur/$max*$len; my $bar; if($slen != $old_slen) { $bar = $char x $slen; $bar .= ' ' x ($len - $slen); $| = 1; print '[',$bar,']'; print "\b" x ($len+2); $| = 0; $old_slen = $slen; } return; } }