sub upto {
my ( $m, $n ) = @_;
return sub {
return if $m > $n;
return $m++;
};
}
####
sub upto {
my ( $m, $n ) = @_;
return sub { $m <= $n ? $m++ : () };
}
##
##
my $iter = upto( -2, 2 );
while ( my ( $ele ) = $iter->() ) {
say $ele;
}
##
##
-2
-1
0
1
2
##
##
sub list {
my @a = @_;
return sub { @a ? shift( @a ) : () };
}
my $iter = list( 1, 0, undef, "a" );
# This doesn't work:
# while ( defined( my $ele = $iter->() ) ) {
# say $ele // "[undef]";
# }
while ( my ( $ele ) = $iter->() ) ) {
say $ele // "[undef]";
}
##
##
1
0
[undef]
a