while(<>) construct with -n, and eliminate chomp, etc., with -l.
#!perl -nl
sub maybe_print_m {
unless ($DONE_M) {
print "$PREFIX.M";
}
}
$PRINTED_LINE = 1;
unless (/$PREFIX/) {
maybe_print_m;
$DONE_M = 0;
}
my $s;
($PREFIX, $s) = split /\./, $_, 2;
if (/[M-Z]$/) {
unless (/M$/) {
maybe_print_m;
}
$DONE_M = 1;
}
print;
END {
maybe_print_m if $PRINTED_LINE;
}