use warnings; use strict; use Acme::Tools qw(minus); use List::Util qw(shuffle); my @alls = 0 .. 9; my @useds = qw(1 2 5 8); # from your aj.db my @unuseds = shuffle(minus(\@alls, \@useds)); my $new_num = $unuseds[0];