1package Test::Harness::Iterator;
2
3use strict;
4use vars qw($VERSION);
5$VERSION = 0.02;
6
7=head1 NAME
8
9Test::Harness::Iterator - Internal Test::Harness Iterator
10
11=head1 SYNOPSIS
12
13  use Test::Harness::Iterator;
14  my $it = Test::Harness::Iterator->new(\*TEST);
15  my $it = Test::Harness::Iterator->new(\@array);
16
17  my $line = $it->next;
18
19=head1 DESCRIPTION
20
21B<FOR INTERNAL USE ONLY!>
22
23This is a simple iterator wrapper for arrays and filehandles.
24
25=head2 new()
26
27Create an iterator.
28
29=head2 next()
30
31Iterate through it, of course.
32
33=cut
34
35sub new {
36    my($proto, $thing) = @_;
37
38    my $self = {};
39    if( ref $thing eq 'GLOB' ) {
40        bless $self, 'Test::Harness::Iterator::FH';
41        $self->{fh} = $thing;
42    }
43    elsif( ref $thing eq 'ARRAY' ) {
44        bless $self, 'Test::Harness::Iterator::ARRAY';
45        $self->{idx}   = 0;
46        $self->{array} = $thing;
47    }
48    else {
49        warn "Can't iterate with a ", ref $thing;
50    }
51
52    return $self;
53}
54
55package Test::Harness::Iterator::FH;
56sub next {
57    my $fh = $_[0]->{fh};
58
59    # readline() doesn't work so good on 5.5.4.
60    return scalar <$fh>;
61}
62
63
64package Test::Harness::Iterator::ARRAY;
65sub next {
66    my $self = shift;
67    return $self->{array}->[$self->{idx}++];
68}
69
70"Steve Peters, Master Of True Value Finding, was here.";
71