El día 28 de mayo de 2009 0:27, Javier <correoli...@gmail.com> escribió: > El día 27 de mayo de 2009 18:06, Pablo Jiménez <pejim...@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. >
Hola, haciendo más pruebas he descubierto que el problema debe de estar en la evaluación de la expresión regular esa en concreto o del tamaño de la misma. Si con los mismos valores de entrada (ficheros de más de 30 Kb's) escribo una expresión en perl que borre, por ejemplo, <temas>, devuelve un valor correcto al sistema. Si luego hago un print, se ve que funciona perfectamente. Sin embargo con la expresión que está ahora "if ($ref =~ /<temas>((.|\n)*?)<\/temas>/){}" siempre falla si el tamaño de la variable es muy grande. ¿Alguna idea de por qué puede pasar eso tras la actualización a lenny? -- Un saludo, Javier. -- To UNSUBSCRIBE, email to debian-user-spanish-requ...@lists.debian.org with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org