Bienvenido a los foros de Perl en español, Altair Auditore.
Hay varios problemas en el código, pero el principal es que estás asignando al
array @google siempre un único elemento, haciendo perder el valor o valores guardados en el bucle anterior.
Es decir, en la línea 4, le estás indicando que el nuevo valor de @google será un único elemento, que es el valor de $1 capturado en la expresión regular. Cuando el bucle termine, @google solo contendrá un único valor: el de la última captura.
Y, además, no contemplas el caso de que la expresión regular se repita
en la misma línea, más de una vez. Solo estás guardando una única coincidencia por línea del fichero asociado a LOGFILE.
Esta es una posible solución:
Using perl Syntax Highlighting
while(my $line = <LOGFILE>) {
chomp($line);
while ( $line =~ m{http://www.google.de/search\?q=(.*[a-z0-9]\b&ie{1}\b)}ig ) {
push @google, $1;
}
}
foreach $linea (@google) {
print "$linea\n";
}
Coloreado en 0.002 segundos, usando
GeSHi 1.0.8.4
- Hemos cambiado el primer for() por un while(). La diferencia es grande: con el for(), el programa Perl se lee el fichero entero a memoria, mientras que con while(), solo se lee una línea cada vez
- Hemos cambiado el if() por un while(), para analizar todas las posibles coincidencias a la largo de la $line.
- Guardamos el valor capturado en @google, con la ayuda de push().
Lo que ya no sé decirte es si el patrón de la expresión regular está bien o no (pero yo apuesto a que no), pues depende de lo que estés buscando.