Perlでエラトステネスの篩

wikipediaの説明を元に書いてみた。

#!/usr/bin/env perl
use strict;
use warnings;
my $x = 100;
my @numbers = (2 .. $x);
my @prime_numbers;
while(1){
    if($numbers[0] > sqrt $x){
        push @prime_numbers, @numbers;
        last;
    }
    my $number = shift @numbers;
    push @prime_numbers, $number;
    @numbers = grep { $_ % $number != 0 } @numbers;
}
print join ',', @prime_numbers, "\n";