<html><head><meta name="color-scheme" content="light dark"></head><body><pre style="word-wrap: break-word; white-space: pre-wrap;">package Pod::Simple::Progress;
use strict;
use warnings;

our $VERSION = '3.45';

# Objects of this class are used for noting progress of an
#  operation every so often.  Messages delivered more often than that
#  are suppressed.
#
# There's actually nothing in here that's specific to Pod processing;
#  but it's ad-hoc enough that I'm not willing to give it a name that
#  implies that it's generally useful, like "IO::Progress" or something.
#
# -- sburke
#
#--------------------------------------------------------------------------

sub new {
  my($class,$delay) = @_;
  my $self = bless {'quiet_until' =&gt; 1},  ref($class) || $class;
  $self-&gt;to(*STDOUT{IO});
  $self-&gt;delay(defined($delay) ? $delay : 5);
  return $self;
}

sub copy {
  my $orig = shift;
  bless {%$orig, 'quiet_until' =&gt; 1}, ref($orig);
}
#--------------------------------------------------------------------------

sub reach {
  my($self, $point, $note) = @_;
  if( (my $now = time) &gt;= $self-&gt;{'quiet_until'}) {
    my $goal;
    my    $to = $self-&gt;{'to'};
    print $to join('',
      ($self-&gt;{'quiet_until'} == 1) ? () : '... ',
      (defined $point) ? (
        '#',
        ($goal = $self-&gt;{'goal'}) ? (
          ' ' x (length($goal) - length($point)),
          $point, '/', $goal,
        ) : $point,
        $note ? ': ' : (),
      ) : (),
      $note || '',
      "\n"
    );
    $self-&gt;{'quiet_until'} = $now + $self-&gt;{'delay'};
  }
  return $self;
}

#--------------------------------------------------------------------------

sub done {
  my($self, $note) = @_;
  $self-&gt;{'quiet_until'} = 1;
  return $self-&gt;reach( undef, $note );
}

#--------------------------------------------------------------------------
# Simple accessors:

sub delay {
  return $_[0]{'delay'} if @_ == 1; $_[0]{'delay'} = $_[1]; return $_[0] }
sub goal {
  return $_[0]{'goal' } if @_ == 1; $_[0]{'goal' } = $_[1]; return $_[0] }
sub to   {
  return $_[0]{'to'   } if @_ == 1; $_[0]{'to'   } = $_[1]; return $_[0] }

#--------------------------------------------------------------------------

unless(caller) { # Simple self-test:
  my $p = __PACKAGE__-&gt;new-&gt;goal(5);
  $p-&gt;reach(1, "Primus!");
  sleep 1;
  $p-&gt;reach(2, "Secundus!");
  sleep 3;
  $p-&gt;reach(3, "Tertius!");
  sleep 5;
  $p-&gt;reach(4);
  $p-&gt;reach(5, "Quintus!");
  sleep 1;
  $p-&gt;done("All done");
}

#--------------------------------------------------------------------------
1;
__END__

</pre></body></html>