Creo entender que el autor ha querido expresar en Perl un algoritmo de búsqueda para mostrarlo y entenderlo mejor, pero supongo que no es de aplicación en el mundo real, sino hacerlo con otros lenguajes que generen una solución compilada.
Perl es muy lento realizando esa tarea: haciendo un Bechmark, me sale que es de 20 a 30 veces más lento que usando index() (o rindex()).
Using perl Syntax Highlighting
sub match_pattern {
my($pat,$seq) = @_;
my $pos = -1;
while (-1 != ($pos = index $seq, $pat, ++$pos)) { # buscamos $pat en $seq a partir de la siguiente posición a $pos
say "Encontrado en posición $pos";
}
}
Coloreado en 0.003 segundos, usando
GeSHi 1.0.8.4
Y esa ventaja es con el tamaño de la secuencia del ejemplo. Si el tamaño de la secuencia aumenta, mucho más aumenta la diferencia, a causa del tiempo empleado en la ordenación.
Se podría aumentar la prestación de make_suffix_array() usando alguna maniobra
Orcish para evitar la ejecución de demasiadas funciones substr().
De todas formas, se agradece muchísimo mostrar algoritmos en código Perl, pues de todos ellos aprendemos bastante.