Iterator-Simple

 view release on metacpan or  search on metacpan

lib/Iterator/Simple.pm  view on Meta::CPAN

$EXPORT_TAGS{basic} = [qw(iterator iter list is_iterator)];
$EXPORT_TAGS{utils} = [qw(
	ifilter iflatten ichain izip ienumerate
	islice ihead iskip imap igrep iarray
	is_iterable is_listable
)];

push @EXPORT_OK, @{$EXPORT_TAGS{basic}}, @{$EXPORT_TAGS{utils}};
$EXPORT_TAGS{all} = [@EXPORT_OK];

sub iterator(&) { ITERATOR_CLASS->new($_[0]);}

# name: iter
# synopsis: iter($object);
# description:
#   autodetect object type and turn it into iterator
# param: object: object to turn into iterator
# return: iterator
sub iter {
	if(not @_) {
		return iterator { return };

lib/Iterator/Simple.pm  view on Meta::CPAN

	});
}

# name: imap
# synopsis: imap { CODE } $iterable;
# description:
#   simplified version of ifilter, no skip, no inflate.
# param: code: transformation code;
# param: source: source iterable object
# return: transformed iterator;
sub imap(&$) {
	my($code, $src) = @_;
	$src = iter($src);
	ref($src)->new(sub {
		local $_ = $src->();
		return if not defined $_;
		return $code->();
	});
}

# name: igrep
# synopsis: igrep { CODE } $iterable;
# description:
#   iterator filter iterator
# param: code: filter condition
# param: source: source iterable object
# return: filtered iterator
sub igrep(&$) {
	my($code, $src) = @_;
	$src = iter($src);
	ref($src)->new(sub {
		while(defined(my $rv = $src->())) {
			local $_ = $rv;
			return $rv if $code->();
		}
		return;
	});
}



( run in 0.231 second using v1.01-cache-2.11-cpan-49f99fa48dc )