{ package Iterator::Array; use Scalar::Util qw(reftype); sub new { my $self = bless {}, shift; (reftype($_[0])||'') eq 'ARRAY' or die "Iterator::Array->new($_[0]) - argument is not an array ref!"; $self->{'ar'} = shift; $self->reset; $self } sub reset { my $self = shift; $self->{'i'} = $[; $self } sub value { my $self = shift; $self->is_exhausted and die "past end"; $self->{'ar'}[ $self->{'i'}++ ] } sub is_exhausted { my $self = shift; $self->{'i'} > $#{ $self->{'ar'} } } }