in reply to Minimal password check, again

Regarding your repetition problem this can perhaps can be useful to you.

sub check_reps { my ($pwd) = @_; while ($pwd =~ /(?=((.+)\2+))/g) { printf "%s repeated %d times, covers %d%%\n", $2, length($1) / length($2), 100 * length($1) / length($pwd) ; } } check_reps('xattattttatty'); __END__ att repeated 2 times, covers 46% ttatt repeated 2 times, covers 76% tt repeated 2 times, covers 30% t repeated 3 times, covers 23% t repeated 2 times, covers 15% t repeated 2 times, covers 15%

Without a better definition of the problem it's hard to give a better answer.

Update: Added an example.

Hope this'll help,
ihb