package MooseX::Iterator; our $VERSION = '0.08'; our $AUTHORITY = 'cpan:RLB'; use MooseX::Iterator::Array; use MooseX::Iterator::Hash; use MooseX::Iterator::Meta::Iterable; 1; __END__ =pod =head1 NAME MooseX::Iterator - Iterate over collections =head1 SYNOPSIS Access the Iterator directly: use Moose; use MooseX::Iterator; my $iter = MooseX::Iterator::Array->new( collection => [ 1, 2, 3, 4, 5, 6 ] ); my $count = 1; while ( $iter->has_next ) { print $iter->next; } Or use the meta class: package TestIterator; use Moose; use MooseX::Iterator; has collection => ( is => 'ro', isa => 'HashRef', default => sub { { one => '1', two => '2', three => '3' } }, ); has iter => ( metaclass => 'Iterable', iterate_over => 'collection', ); no Moose; package main; use Data::Dumper; my $test = TestIterator->new; my $iter = $test->iter; while ( $it->has_next ) { my $next = $iter->next; print $next->{'key'} . "\n"; print $next->{'value'} . "\n"; } =head1 DESCRIPTION This is an attempt to add smalltalk-like streams to Moose. It currently works with ArrayRefs and HashRefs. =over =item next The next method provides the next item in the colletion. For arrays it returns the element of the array For hashs it returns a pair as a hashref with the keys: key and value =item has_next The has_next method is a boolean method that is true if there is another item in the colletion after the current item. and falue if there isn't. =item peek The peek method returns the next item without moving the state of the iterator forward. It returns undef if it is at the end of the collection. =back =head1 AUTHOR Robert Boone Erlb@cpan.orgE And thank you to Steven Little (steven) and Matt Trout (mst) for the help and advice they gave. =head1 COPYRIGHT AND LICENSE This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =cut