El jue, 28-05-2009 a las 12:41 +0200, Javier escribió: > 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? >
Proba parsear sin utilizar XML, es decir proba con un archivo de texto comun, leyendo linea a linea, para ver si te da ese mismo error. Podes hacerlo con ese mismo archivo > -- > 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