The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
package Text::ProgressBar::Bar;
use Moose; 
our $VERSION = '0.2';
use Text::ProgressBar;

with 'Text::ProgressBar::WidgetHFill';

has 'marker'    => (is => 'rw', isa => 'Str', default   => '#');
has 'left'      => (is => 'rw', isa => 'Str', default   => '|');
has 'right'     => (is => 'rw', isa => 'Str', default   => '|');
has 'fill'      => (is => 'rw', isa => 'Str', default   => ' ');
has 'fill_left' => (is => 'rw', isa => 'Bool', default  => 1);

sub update{
    my $self  = shift;
    my $pbar  = shift;
    my $width = shift;
    my ($left, $marked, $right, $fill)  = 
                ($self->left, $self->marker, $self->right, $self->fill);
    $width -= length($left) + length($right); 
    if ($pbar->maxval) {
        $marked x= ($pbar->currval / $pbar->maxval * $width);}
    else { $marked = '';}
    my $res;
    if ($self->fill_left) {
        ($res = sprintf("%s%-${width}s%s", $left, $marked, $right)) =~ s/ /$fill/g;
    } else {
        ($res = sprintf("%s%${width}s%s", $left, $marked, $right))  =~ s/ /$fill/g;
    }
    return $res;
}

no Moose;
1;
__END__

=pod
 
=head1 NAME
 
Text::ProgressBar::Bar - progress bar which stretches to fill the line
 
=head1 VERSION
 
version 0.2
 
=head1 SYNOPSIS

    use Text::ProgressBar::Bar;

    my $pbar = Text::ProgressBar->new(maxval => 300);
    $pbar->start();
    for my $i (1..300) {
        sleep 0.01;
        $pbar->update($i+1);
    }
    $pbar->finish;
    
=head1 DESCRIPTION
 
A progress bar which stretches to fill the line. The drawing ascii
characters can be changed during calling class constructor or by calling
the corresponding methods. Example of defalut output

    |#######              |

=head1 ATTRIBUTES
 
=head2 marker

character that moves from left to right default '#'

=head2 left

character that specify left margin default '|'

=head2 right

character that specify right margin default '|'

=head2 fill

fill character default is space ' '

=head2 fill_left

fill with fill character, defalut is True

=head1 METHODS

=head2 update

handler for redrawing current regions within the area. (Inherited from Widget.)

=head1 AUTHOR

Farhad Fouladi, C<< <farhad at cpan.org> >>

=head1 LICENSE AND COPYRIGHT

Copyright 2012 Farhad Fouladi.

This program is free software; you can redistribute it and/or modify it
under the terms of either: the GNU General Public License as published
by the Free Software Foundation; or the Artistic License.

See http://dev.perl.org/licenses/ for more information.

=cut