use strict; $|++; my $generator = do { my $num = 1; sub { ++$num } }; while (1) { my $prime = $generator->(); print "$prime\n"; ## don't let any multiple of these escape: my $oldgenerator = $generator; $generator = sub { { my $next_prime = $oldgenerator->(); redo if $next_prime % $prime == 0; return $next_prime; } }; }