home *** CD-ROM | disk | FTP | other *** search
/ PC World 2005 June / PCWorld_2005-06_cd.bin / software / vyzkuste / firewally / firewally.exe / framework-2.3.exe / Iterator.pm < prev    next >
Text File  |  2003-11-07  |  1KB  |  62 lines

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