sub checker { my ($str) = @_; for ('00' .. '99') { my $n = 0; $n++ while $str =~ /$_/g; die "'$_' appears $n times\n" if $n != 1; } } sub generate { 0 1 2 3 4 5 6 7 8 #01234567890123456789012345678901234567890123456789012345678901234567890123456789012345 for$x(0..9){for$y(0..9){/$x$y/||(/^$y/and$_="$x$_")||(/$x$/and$_.=$y)or$_.="$x$y"}}$_ } print "Generating ...\n"; my $test = generate(); print "$test\n"; print "Checking ...\n"; checker($test); print "Ok\n"; ---- Generating ... 99001020304050607080911213141516171819223242526272829334353637383944546474849556575859667686977879889 Checking ... Ok