Hola,
Gracias a ambos por las aportaciones.
Tienes razón, explorer: estaba trabajando con ficheros de ejemplo y, a raíz de tu comentario, veo que la he liado un poco, ya que en archivo.csv que puse aparecía la IP del cliente y no la red de la sede, como es el caso. Perdón por el error. A ver si aclaro lo de la IP. Los ficheros tienen los formatos siguiente:
Using text Syntax Highlighting
172.16.18.;Sede_Cantabria
172.19.194.;Sede_Leon
Coloreado en 0.000 segundos, usando
GeSHi 1.0.8.4
Using text Syntax Highlighting
2013-05-31 09:00:15 172.16.18.5 "blabla bla Juan blablabla" campo5 campo6
2013-05-31 09:00:18 172.19.194.101 "blabla bla Antonio blablabla blabla bla" campo5 campo6 campo 7 campo8
2013-05-31 09:00:21 172.16.18.5 "blabla Juan blablabla" campo5
Coloreado en 0.000 segundos, usando
GeSHi 1.0.8.4
Es decir: los tres primeros octetos del campo
IP Cliente del archivo.txt coinciden con el campo
IP Sede en archivo.csv (campo que además termina con "."). De ahí el interés en comprobar que el campo
IP Cliente CONTENGA el campo
IP Sede, y no que sean COINCIDENTES como hacía al principio con el
if exists.
Lo que hacía era procesar antes archivo.txt con un VBScript que eliminaba el último octeto del campo
IP Cliente, con lo que en ese caso ambos campos ya eran coincidentes, pero claro, al trabajar con los archivos reales (sobre 1 GB de texto) el rendimiento de este VBScript no era bueno.
Ahora, al cambiar
if (exists $redes{$IP}) { por
if ($IP =~ m/\b$redC\b/) {evidentemente el rendimiento ha empeorado, cosa que veo lógica ya que a nivel de cálculo, no es lo mismo buscar una cadena que contenga otra que comparar si dos cadenas coinciden.
Espero haber aclarado las cosas un poco y no haberlas liado más. Os pido disculpas por el error.
Voy a echar un vistazo a la función index() que comenta explorer a ver si me aclaro y consigo mejorar el rendimiento. Gracias por vuestra ayuda.