This is an attempt to save a thread in SoPW which I thought can be useful for others.
There are already incredible answers in the thread, so feel free to check in SoPW.
Please don't misunderstand me. I honestly think this can be useful. I don't mean to boost my XP here, or in that thread which I posted.
One possible answers is given by good sgifford
#!/usr/bin/perl -w
use strict;
my $s1 ='CCCATCTGTCCTTATTTGCTG'; my @a1 = qw(ATCTG ATTTG);
my $s2 ='ACCCATCTGTCCTTGGCCAT'; my @a2 = qw(CCATC);
my $s3 ='CCACCAGCACCTGTC'; my @a3 = qw(CCACC CCAGC GCACC);
my $s4 ='CCCAACACCTGCTGCCT'; my @a4 = qw(CCAAC ACACC);
put_bracket($s1,\@a1);
put_bracket($s2,\@a2);
put_bracket($s3,\@a3);
put_bracket($s4,\@a4);
sub put_bracket
{
my( $str, $ar ) = @_;
foreach my $subs ( @$ar )
{
# Construct a regexp with [\[\]] between all the letters
my $newsub = join '[\[\]]?', split //, $subs;
$str =~ s/($newsub)/[$1]/g;
}
# Now de-nest the brackets in the string
my $depth = 0;
my $newstr = '';
foreach my $c ( split //, $str )
{
if ( $c eq '[' ) {
$newstr .= $c
if $depth++ == 0;
}
elsif ( $c eq ']' ) {
$newstr .= $c
if --$depth == 0;
}
else {
$newstr .= $c;
}
}
return $newstr;
}
More can be found
here. Don't vote my root posting but vote those remarkable answers you will find there.