sub findCycle searches a string to determine if it is comprised of a pattern repeated two or more times and returns the pattern length and the pattern.
If there is not a repeating pattern, the length of the string and the entire string are returned.
use strict; use warnings; while (<DATA>) { 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
|
---|
Replies are listed 'Best First'. | |
---|---|
Re: Find repeated patterns in strings
by tlm (Prior) on Aug 27, 2005 at 17:54 UTC | |
by GrandFather (Saint) on Aug 27, 2005 at 20:58 UTC | |
by bioMan (Beadle) on Oct 04, 2005 at 17:16 UTC | |
by QM (Parson) on Oct 04, 2005 at 18:11 UTC | |
Re: Find repeated patterns in strings
by tlm (Prior) on Aug 27, 2005 at 14:31 UTC |
Back to
Cool Uses for Perl