my $max = shift || 100; my @nums = (2 .. $max); my @primes; while (@nums) { my $prime = shift @nums; push @primes, $prime; if ($prime ** 2 > $max) { push @primes, @nums; last; } @nums = grep {$_ % $prime != 0} @nums; } say "@primes";