No, the split function is not a good way to do this trick. A regular expression is a better bet:
#!/usr/bin/perl
use strict;
use warnings;
use File::Copy;
my $str1='MCCAALAPPMAATVGPESIWLWIGTIGMTLGTLYFVGRGRGVRDRKMQEFYIITIFITTI
+AAAMYFAMATGFGVT-------------EVMVG----DE---ALTIYWARYADWLFTTPLLLLDLSLLA
+GANRN----TIATLIG-LDVFMIG---T---GAIAALSST-PGTRIAWWAIST--GALL--ALLYVLVG
+TLSENARNRAPEVA--SLFGRLRNLVIALWFLYPVVWILGT---EGTFGILP--LYWETAAFMVLDLSA
+KVGFGVILLQSRSVLERVATPTAAPT';
my $str2='--OOOOOOOOOOOOOOOOMMMMMMMMMMMMMMMMMMMMMIIIIIIIIIIMMMMMMMMMMM
+MMMMMMMMMMOOOOO-------------OOOOO----OO---OOOOMMMMMMMMMMMMMMMMMMMMMII
+IIIII----MMMMMMM-MMMMMMM---M---MMMMMMOOO-OOOOMMMMMMMM--MMMM--MMMMMMMM
+MMIIIIIIIIIIII--IIIIMMMMMMMMMMMMMMMMMMMMO---OOO-OOOO--OOOMMMMMMMMMMMM
+MMMMMMMMMIIIIIIIIIIIII----';
while ($str2 =~ /(-+)/g) {
my ($start, $end) = ($-[0], $+[0]);
my $matchLen = $end - $start;
next if substr($str1, $start, $matchLen) =~ /^-+$/;
my $chIdx = $end == length($str2) ? $start - 1 : $end;
substr ($str2, $start, $matchLen, substr($str2, $chIdx, 1) x $matc
+hLen);
}
print $str2;
Prints:
OOOOOOOOOOOOOOOOOOMMMMMMMMMMMMMMMMMMMMMIIIIIIIIIIMMMMMMMMMMMMMMMMMMMMM
+OOOOO-------------OOOOO----OO---OOOOMMMMMMMMMMMMMMMMMMMMMIIIIIII----M
+MMMMMM-MMMMMMM---M---MMMMMMOOO-OOOOMMMMMMMM--MMMM--MMMMMMMMMMIIIIIIII
+IIII--IIIIMMMMMMMMMMMMMMMMMMMMO---OOOOOOOO--OOOMMMMMMMMMMMMMMMMMMMMMI
+IIIIIIIIIIIIIIII
Perl is the programming world's equivalent of English