sub rot_same { my( $word )= @_; my %seen; for(1..length $word) { ## rotate right $word= chop($word) . $word; return 1 if exists $seen{$word}; $seen{$word}++; } } print $_, ' => ', rot_same($_), $/ for qw(abcdef aaaaaa abcabc); __END__ abcdef => aaaaaa => 1 abcabc => 1 #### sub too_many_repetitions { my( $word )= @_; my $same_char_percent= 0.5; my $max_same_char= $same_char_percent * length $word; my @chars= split // => $word; my %seen; $seen{$_}++ for @chars; return 1 if $max_same_char < pop @{[sort values %seen]}; } print $_, ' => ', too_many_repetitions($_), $/ for qw(abcdef aaaaaa abcabc); __END__ abcdef => aaaaaa => 1 abcabc =>