in reply to Re^4: Pattern matching simultaneous substitution
in thread Pattern matching simultaneous substitution

Fixed it after all:
while(<>) { if($_=~/^>/) { $id=$_; $seq=<>; print $id.$seq; if($seq=~/^s+$/) { $seq=~s/s/I/g; print $seq; } else { while($seq=~/(s+)([U|D]+)(s+)/g) { $part_before=$1; $len_bef=length($part_before); $part_TM=$2; $part_after=$3; $len_after=length($part_after); if($part_TM=~/U/) { $part_bef_new='I' x $len_bef; $part_after_new = 'O' x $len_after; } elsif($part_TM=~/D/) { $part_bef_new='O' x $len_bef; $part_after_new = 'I' x $len_after; } $seq=~s/$part_before/$part_bef_new/; $seq=~s/$part_after/$part_after_new/; } $seq=~s/U/M/g; $seq=~s/D/M/g; print $seq; } } }

Thank you for your time!

Replies are listed 'Best First'.
Re^6: Pattern matching simultaneous substitution
by choroba (Cardinal) on Jan 05, 2022 at 21:33 UTC
    I don't think your code works. When I run it for input
    ssDDssUUss

    it returns

    OOMMIIMMss

    while you previously claimed the correct output is

    OOMMIIMMOO

    Similarly,

    ssUUssDDss

    is transformed into

    IIMMOOMMss

    while the correct output should be

    IIMMOOMMII

    map{substr$_->[0],$_->[1]||0,1}[\*||{},3],[[]],[ref qr-1,-,-1],[{}],[sub{}^*ARGV,3]
      You were right, thanks! I added a last regex substitution to cover the last part :)
      Thanks again!