sub infinite_evens { my $curr = shift; $curr++ if $curr % 2; my $next; return sub { if ( ! defined $next ) { return $next = $curr } return $next += 2; }; } my $next_even = infinite_evens( 41 ); print $next_even->(), "\n" while 1;