use Algorithm::Loops 'NextPermute'; my @dig= ( 1..9 ); do { my $s= my $v= join "", reverse @dig; chop($s) while $s && 0 == $s % length($s); warn $v, $/ if ! $s; } while( NextPermute(@dig) );