use strict; use warnings; while () { chomp; my ($pattern, $cycleLen) = findCycle ($_); print "$_ -> $pattern ($cycleLen)\n"; } sub findCycle { my $str = shift; my $copy = $str; my $cycleLen = 0; my $strLen = length ($copy); for (0..($strLen - 1)) { $copy .= substr $copy, 0, 1, ''; $cycleLen = $_ + 1; ($str ^ $copy) =~ /^\0*/; return wantarray ? ($cycleLen, substr $str, 0, $cycleLen) : $cycleLen if $+[0] == $strLen; } return wantarray ? ($strLen, $str) : $strLen; } __DATA__ TTTTT ATATAT ATTATTATT 123412341234 123456