La manera más rápida de encontrar posiciones desiguales entre dos cadenas de la misma longitud

Tengo millones de pares de cadenas de la misma longitud que quiero comparar y encontrar la posición en la que tiene desajustes.

Por ejemplo para cada$str1 y$str2 Queremos encontrar la posición de desajuste con$str_source:

$str_source = "ATTCCGGG";

$str1       = "ATTGCGGG"; # 1 mismatch with Str1 at position 3 (0-based)
$str2       = "ATACCGGC"; # 2 mismatches with source at position  2 and 7

¿Hay una manera rápida de hacerlo. Actualmente tengo el método de estilo C, el cual hago un bucle en cada posición en ambas cadenas usando la función 'substr'. Pero este enfoque es terriblemente lento.

my @mism_pos;
for $i (0 .. length($str_source)) {
   $source_base = substr($str_source,$i,1);
   $str_base    = substr($str2,$i,$1);

  if ($source_base ne $str_base) {
     push @mism_pos,$i;
  }

}