The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl -w

use strict;
use warnings;
use Math::Primality qw/is_prime/;
use Math::Pari qw/isprime/;
use Math::Primality::AKS qw/is_aks_prime/;
use Math::Prime::Util;
use Benchmark qw/:all/;
use Math::GMPz;

my $magnitude = shift || 50;

my $gmpz = Math::GMPz->new('1' . ('0'x$magnitude) );
my $count = shift || 200;
my @nums = map { "$_" } map { int(1+rand(9)) * $gmpz + int(1+rand(100)) } (1..100);

print <<BENCH;
Benchmarking:
Math::Primality $Math::Primality::VERSION
Math::Pari $Math::Pari::VERSION
Math::Prime::Util $Math::Pari::VERSION
BENCH

print "Psuedorandom numbers of magnitude 10 ^ $magnitude\n";

cmpthese($count,{
    'Math::Primality::is_prime'          => sub { is_prime($_) for @nums },
    'Math::Pari::isprime'                => sub { isprime($_) for @nums },
    'Math::Primality::AKS::is_aks_prime' => sub { is_aks_prime($_) for @nums },
    'Math::Prime::Util::is_prime'        => sub { Math::Prime::Util::is_prime($_) for @small_nums },
});