$max = 0; # 2 .. 987654321 foreach $i (2 .. 987654321) { $q = $i; foreach $j (2 .. $i) { $q .= ($j * $i); last if ($q > 987654321); if ($q >= 123456789 && $q <= 987654321 && isPandigital($q) && $q > $max) { print "-> $q\n"; } } } sub isPandigital { my ($n) = @_; return ($n =~ '1' && $n =~ '2' && $n =~ '3' && $n =~ '4' && $n =~ '5' && $n =~ '6' && $n =~ '7' && $n =~ '8' && $n =~ '9'); }