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 )