use warnings; use strict; my @digits_used; #$digits_used = [false x 10]; find_digits(1, 0); #// get the ball rolling sub find_digits { my ($depth, $total) = @_; for my $digit (0..9) { if( not $digits_used[$digit]) { $digits_used[$digit] = 1; if ($depth < 4) { find_digits($depth+1, ($total+$digit)*10); #// recurse } else { print $total+$digit,"\n"; } $digits_used[$digit] = 0; } #// if used } #// for digits } #// end sub __END__ c:\usr\scripts>sundial.pl | find /c /v "" 5040