package Data::Enumerator::Range;
use strict;
use warnings;
use base qw/Data::Enumerator::Base/;
sub new {
my ( $class, $start, $end, $succ ) = @_;
return bless {
start => $start,
end => $end,
succ => $succ,
}, $class;
}
sub iterator {
my ( $self ) = @_;
my $counter = $self->{start};
my $end = $self->{end};
my $succ = $self->{succ};
my $succ_func = (ref $succ) ? $succ : sub{ $_[0]+$succ};
return sub{
return $self->LAST if $counter >= $end;
my $prev = $counter;
$counter = $succ_func->($counter);
return $prev;
};
}
1;