两个字符串之间的 perl 计数不匹配

perl count mismatch between two strings

我只需要计算两个字符串之间的不匹配。假设:

my $s1 = "ATCG";
my $s2 = "ATTG"; 

这应该给出:1 作为不匹配。不用找位置或不匹配的地方。

我正在寻找快速的方法。我认为拆分成数组并在循环中匹配或使用 substr 匹配每个位置可能会很慢,因为需要检查超过十亿对。谢谢

只需将两个字符串异或。结果中的每个 NUL 字符代表两个字符串中字符相同的位置。

my ($s1, $s2) = qw( ATCG ATTG );

my $count = ( $s1 ^ $s2 ) =~ tr/[=10=]//c;

print "$count\n";   # Prints "1"

注意:如果你要重复比较一个字符串,将它和你正在比较的字符串传递给 utf8::downgrade 以确保 ^ 尽可能快是。

utf8::downgrade($s1);  # Change the internal format in which
utf8::downgrade($s2);  #   the strings are stored to speed up $s1^$s2.

如果任一字符串包含 U+00FF 以上的 UNICODE 字符,则为 useless/wasteful。