=pod =head1 NAME Data::Range::Compare::Stream::Cookbook::FILE_RESULT_EXAMPLE - Doc on how to build file result iterators =head1 DESCRIPTION This section shows how to roll your own Consolidation result iterator, based on file iteration =head1 Special notes This example assumes your data contains no overlaps no duplicates and is pre-sorted in the desired order =head2 Implementing a new Data::Range::Compare::Stream::Iterator::Consolidate class Source File 1 2 3 5 9 11 12 12 98 174 Example package package MyIterator; use strict; use warnings; use IO::File; use IO::Select; use base qw(Data::Range::Compare::Stream::Iterator::Base); use Data::Range::Compare::Stream::Iterator::Consolidate::Result; use Data::Range::Compare::Stream; sub new { my ($class,%args)=@_; my $has_next; my $self=$class->SUPER::new(%args); if(defined($args{filename})) { my $fh=IO::File->new($args{filename}); if($fh) { $self->{fh}=$fh; my $line=$fh->getline; $self->{next_line}=$line; $has_next=defined($line); } else { $self->{msg}="Error could not open $args{filename} error was: $!"; } } $self->{has_next}=$has_next; return $self; } sub get_next { my ($self)=@_; return undef unless $self->has_next; my $line=$self->{next_line}; $self->{next_line}=$self->{fh}->getline; $self->{has_next}=defined($self->{next_line}); chomp $line; my $range=new Data::Range::Compare::Stream(split /\s+/,$line); return new Data::Range::Compare::Stream::Iterator::Consolidate::Result($range,$range,$range); } 1; =head2 Putting it all togeather Now we can use the result iterator. use strict; use warnings; use MyIterator; my $iterator=new MyIterator(filename=>'file_example.src'); while($iterator->has_next) { print $iterator->get_next,"\n"; } =head1 AUTHOR Michael Shipper =head1 Source-Forge Project As of version 0.001 the Project has been moved to Source-Forge.net L L =head1 COPYRIGHT Copyright 2011 Michael Shipper. All rights reserved. This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =cut