in reply to Regex related question
I have not benchmarked this, but it is probably faster than your current version. HTH
use warnings; use strict; while (<DATA>) { chomp; print "$_ -> "; my $len = length; if ( s/(\w)\1{2,}\Z/$1$1/ ) { $len -= length; print "$len -> $_"; } print "\n"; } __DATA__ ACTGCTAGGGGGGG TCAGCTAGCNA ACTGSCGACAAAA GTCTGAGTTATTT
Update: davido encouraged me to present my alternative version. I converted the original array based variation into a string based one, hoping (not measured) for better speed. So, in the sense of TIMTOWTDI:
use strict; use warnings; my $in = shift || 'GATATTTTTTT'; $_ = $in; my $last = substr $_, -1; if ( length > 2 and substr($_, -2, 1) eq $last ) { chop while substr($_, -1) eq $last; $_ .= $last . $last; } print "in : $in\n"; print "out: $_\n";
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^2: Regex related question
by happy.barney (Friar) on Aug 08, 2011 at 08:55 UTC | |
|
Re^2: Regex related question
by Hena (Friar) on Aug 08, 2011 at 07:24 UTC |