我有一系列序列:
@array = (AAABBBBBCCCCCDDDDD,AEABCBBBCCECCDDDDD...); #up to 55 sequences
我想比较每个序列的每个位置。换句话说,所示序列的第一个位置是A,因此它们是相同的。我想要一个计数器,表明每个字符串中有多少个位置没有相同的字母。
AAABB
AAABC
AAABB #5th position is not equal, so result is 1.
print $counter -----> 1.
我知道如何使用2个序列:
my $string1 = 'AAABBBBBCCCCCDDDDD';
my $string2 = 'AEABBBBBCCECCDDDDD';
my $result = '';
for(0 .. length($string1)) {
my $char = substr($string2, $_, 1);
if($char ne substr($string1, $_, 1)) {
$counter++;
}
}
print $counter;
问题是我在一个数组中有55个序列。
答案 0 :(得分:1)
您在问题的第一部分中采用了正确的方法:使用数组。
my @strings = qw( AAABBBBBCCCCCDDDDD AEABBBBBCCECCDDDDD );
my $result = '';
my $counter = 0;
for my $pos (0 .. length($strings[0])) {
my $char = substr($strings[0], $pos, 1);
for my $i (1..$#strings) {
if (substr($strings[$i], $pos, 1) ne $char) {
++$counter;
last;
}
}
}
print "$counter\n";
答案 1 :(得分:0)
咦?如果55个左右的每一个字母中的每个字母都必须相同,那么肯定不需要查看单个字母吗?整个字符串必须相等,所以这回答了问题:
#!/usr/bin/perl
use strict;
use warnings;
my @array = qw(AAABBBBBCCCCCDDDDD AEABBBBBCCECCDDDDD APPLE);
for my $i (1..$#array){
print "$array[$i] isn't same as $array[0]\n" if $array[$i] ne $array[0];
}