El problema está en que las "palabras" del primer fichero contienen caracteres que son significativos para una expresión regular. En concreto, '*' es un operador que indica que queremos encontrar cero o más veces la expresión que le precede. Así, con
/IGHV1-11*01/ no estás buscando por exáctamente 'IGHV1-11*01'. El asterisco tiene ahí un significado.
La solución sería "escapar" el significado de esos caracteres:
Using perl Syntax Highlighting
$var = quotemeta($1);
Coloreado en 0.001 segundos, usando
GeSHi 1.0.8.4
Por otra parte, si las "palabras" son
iguales a lo que estamos buscando en el segundo fichero, es mucho mejor usar otra cosa que no expresiones regulares. Con index() obtendrás un resultado mucho más rápido.
Otro detalle: si te fijas, estás abriendo y leyendo el segundo archivo
por cada línea del primero. Eso no es eficiente. Si tienes suficiente memoria, es mejor almacenar toda la información en memoria y así el programa realizará el trabajo mucho más rápido.
Por otra parte, este problema lo hemos tratado en otras ocasiones: