use strict; use warnings; my ($max, $p, @prime, $limit) = (100, 2, 2); PRIME: while (1) { $limit = int sqrt(++$p); for (@prime) { last if $_ > $limit; next PRIME if $p % $_ == 0; } push @prime, $p; last if $max == $#prime + 1; }