Было уже на форуме, вот интересно:
ProgressBar.pm
Код | package ProgressBar; use File::Basename;
my $max = 50;
sub new { local $| = 1; my ($class, $filename) = @_; my $self = bless {}, $class; $self->{SIZE} = -s($filename); $self->{STEP} = int($self->{SIZE} / $max); $self->{NUM} = 0; $self->{CURR} = undef; my $caption = basename($filename); $caption =~ m!^(.{1,8})!; $caption = $1; print "$caption:\t"; for (my $j = 0; $j < $max; $j++) { print chr(176) }; for (my $j = 0; $j < $max; $j++) { print chr(8) }; return $self; } sub DESTROY {print "\n"}
sub render{ local $| = 1; my $self = shift; if (@_) { $self->{CURR} = shift } my $number_for_add = $self->{CURR} - $self->{NUM} * $self->{STEP}; if ($number_for_add > 0) { $number_for_add = int($number_for_add / $self->{STEP}); $self->{NUM} += $number_for_add; for (my $j = 0; $j < $number_for_add; $j++) { print chr(219) }; } return $self->{NUM}; }
1;
|
sample.pl
Код | #!perl use strict; use ProgressBar;
my $in_file = 'filename'; my $progress = new ProgressBar($in_file); open my $fh, '<', $in_file || die "can't open file $!\n"; while (my $line = <$fh>){ $progress->render(tell $fh); #текст программы } close $fh;
|
|