$ 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;
'