[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Expresiones regulares en perl



El día 27 de mayo de 2009 18:06, Pablo Jiménez <pejimene@vtr.net> escribió:
> On Wed, May 27, 2009 at 05:02:06PM +0200, Javier wrote:
>> Hola,
>>
>> acabo de actualizar un equipo de etch a lenny y la versión de perl
>> ascendió de la 5.8 a la 5.10.
>> El problema me viene ahora en cómo lenny trata las expresiones
>> regulares, pues parece que no es de la misma forma. Tengo un programa
>> chorra que lee de un fichero, lo almacena en una variable y luego a
>> esa variable se le hace una expresión regular. Con la nueva versión de
>> perl, dicho código falla siempre que el archivo leído ocupe más de 30
>> Kb's. Si ocupa menos la expresión regular va perfectamente.
>> Comprobando el fichero sí lo almacena correctamente en la variable,
>> por lo que el fallo está a nivel del if, pero no se que es lo que pudo
>> cambiar en perl 5.10
>>
>> Posteo el código:
>> -----------------------------------------------------
>> #!/usr/bin/perl
>>
>> use XML::Simpler;
>>
>> my $ref=XMLin("t.xml");
>> if ($ref =~ /<temas>((.|\n)*?)<\/temas>/)
>> {
>>         print "Resultado: $1";
>> }
>>
>> -----------------------------------------------------
>>
>> ¿Alguna idea de por qué el fallo?
>
> Tal vez se deba a que intentas hacer un matching para un string compuesto
> de múltiples líneas, pero no has indicado el flag m. Prueba cambiando tu if
> por:
>
> if ($ref =~ /<temas>(.*?)<\/temas>/m)
>
> Indícanos si tienes alguna novedad.
>
> Saludos.
>
> --
> Pablo Jiménez
>

Hola,

sí probé con el match m para realizar el grep y aún así me daba el mismo error.
Creo que puede ser algo de las versiones de perl 5.8 contra 5.10, pero
no se lo qué :(
Quizás algo estilo tamaño máximo de un grep en memoria o algo así. En
equipos con etch va perfectamente y al actualizarlos a Lenny ya no. Lo
único que cambia para la expresión regular es la versión.


-- 
Un saludo,
Javier.


Reply to: