$ perl -wle' my %neg = ( o => "i", i => "o" ); while (<>) { chomp; s/([io])(M*)(\.+)/ $1.$2.( $neg{$1} x length($3) ) /eg; s/(\.+)(?=M*([io]))/ $neg{$2} x length($1) /eg; print; } ' ....MMMMiiii ....MMMMoooo iiiiMMMM.... ooooMMMM.... ooooMMMMiiii iiiiMMMMoooo iiiiMMMMoooo ooooMMMMiiii #### $ perl -wle' my %neg = ( o => "i", i => "o" ); while (<>) { chomp; s/([io])M*\K(\.+)/ $neg{$1} x length($2) /eg; s/(\.+)(?=M*([io]))/ $neg{$2} x length($1) /eg; print; } ' ....MMMMiiii ....MMMMoooo iiiiMMMM.... ooooMMMM.... ooooMMMMiiii iiiiMMMMoooo iiiiMMMMoooo ooooMMMMiiii #### perl -ple' BEGIN { %neg = qw( i o o i ) } s/([io])M*\K(\.+)/ $neg{$1} x length($2) /eg; s/(\.+)(?=M*([io]))/ $neg{$2} x length($1) /eg; '