#!/usr/bin/perl use warnings; $|=1; for my $x(1..100){ print progress_bar( $x,100,25,'='); sleep 1; } sub progress_bar { my ( $got, $total, $width, $char ) = @_; $width ||= 25; $char ||= '='; $num_width = length $total; sprintf "|%-${width}s| Got %${num_width}s bytes of %s (%.2f%%)\r", $char x (($width-1)*$got/$total). '>', $got, $total, 100*$got/$total; }