my $p = sub {
my $n = 2;
my $g = sub { $n++ };
sub {
my $r = $g->();
$g = sub {
my ($f, $g) = @_;
sub {
while (1) {
my $r = $g->();
return $r if $r % $f;
}
};
}->($r, $g);
$r;
};
}->();
while ((my $n = $p->()) < 500) {
print "$n\n";
}
####
$g = sub { $n++ };
####
perl -e 'print sub { "Hello @{[shift]}!\n" }->("World")'