• Publicidad

Perl se bloquea en carga del fichero

¿Ya sabes lo que es una referencia? Has progresado, el nível básico es cosa del pasado y ahora estás listo para el siguiente nivel.

Perl se bloquea en carga del fichero

Notapor otorices » 2010-10-27 16:23 @724

Muy buenas,

el problema que os voy a contar es bastante extraño, y la verdad es que no tengo ni idea de lo que lo puede estar provocando.

Resulta que tengo un programa que llama a 3 rutinas distintas, cada una carga un fichero y lo guarda en un vector. De esta forma:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
open $f, '<:encoding(Latin-9)', "fichero.dat";

while ($linea = <$f>){
    push(@vector,$linea);
}
close $f;
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


El caso es que solo una de estas tres rutinas me carga el fichero, ya que en las otras dos se quedan bloqueadas. He probado imprimiendo por pantalla según iba cargando el fichero, y siempre se bloquea cuando va a cargar la última línea del fichero.

Cabe añadir que las tres funciones son prácticamente un copy-paste, por lo tanto no hay diferencia alguna en principio. Los tres ficheros que se cargan están creados exactamente igual... En resumen, que sólo funciona con un fichero correctamente.

He estado haciendo más pruebas, y me he dado cuenta de algo curioso:

Si en el programa principal tengo:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
cargar_fichero_A();
cargar_fichero_B();
cargar_fichero_C();
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


donde se me bloquea es al final del fichero C. Si cargo solo el fichero "A" funciona bien. Si cargo solo el "B" o el "C", se bloquea. Si cargo el "B" y el "C" (en ese orden), se bloquea en el "C". Si cargo el "B" y/o el "C" y después el "A", pues se bloquea en el "A"...

Un rollo, pero no le encuentro explicación.

¿Alguien tiene idea de lo que me puede estar pasando?

¡Muchas gracias!
otorices
Perlero nuevo
Perlero nuevo
 
Mensajes: 41
Registrado: 2009-04-16 13:59 @624

Publicidad

Re: Perl se bloquea en carga del fichero

Notapor explorer » 2010-10-27 16:38 @735

Asegúrate de que la variable $f sea local dentro de cada subrutina. Una forma fácil sería con

open my $f, q'<:encoding(Latin-9)', "fichero.dat";

¿No estarás en Windows, verdad? ¿Qué versión de Perl tienes?

¿Puedes publicar un programa, lo más pequeño posible, que reproduzca el error?
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Perl se bloquea en carga del fichero

Notapor otorices » 2010-10-27 17:01 @751

Creo que el problema está relacionado con declarar las variables de tipo fichero como globales. El programa, después de cargar los 3 ficheros, hace una llamada a una función la cual utiliza otra variable de fichero global. Si elimino la llamada a esta función, los tres ficheros se cargan a la perfección, por lo tanto por ahí van los tiros.

En cuanto sepa con exactitud el problema que tenía lo comento.

¡Gracias por tu respuesta!
otorices
Perlero nuevo
Perlero nuevo
 
Mensajes: 41
Registrado: 2009-04-16 13:59 @624

Re: Perl se bloquea en carga del fichero

Notapor otorices » 2010-10-27 17:23 @766

Esto... ¿me matarías si te dijera que el problema fuera un contador que no incrementaba dentro de un "while", justo después de la carga de los ficheros? :oops: :roll:
otorices
Perlero nuevo
Perlero nuevo
 
Mensajes: 41
Registrado: 2009-04-16 13:59 @624

Re: Perl se bloquea en carga del fichero

Notapor explorer » 2010-10-28 03:26 @185

Eso pasa por no publicar todo el código... :)
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España


Volver a Intermedio

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 9 invitados