in reply to Sieve of Eratosthenes with closures

Here's a slightly more direct implementation of that:
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; } }; }

-- Randal L. Schwartz, Perl hacker
Be sure to read my standard disclaimer if this is a reply.