• Publicidad

error: readline() on unopened filehandle FICHERO

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

error: readline() on unopened filehandle FICHERO

Notapor jbgae » 2008-05-03 11:54 @537

Hola tengo un problema con esta función:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
sub OpcionD{
       
        my ($hora, $fichero, $directorio) = ($_[0], $_[1],$_[2]);
       
        opendir (DIR, $directorio) or die "Error: no puedo abrir directorio de planificacion $directorio\n";
        my @contenido_directorio = readdir (DIR);  
        closedir (DIR);

        if (-s $fichero ){
                my @contenido_fichero = <FICHERO>;  # problema
                open (FICHERO, "+<fichero");

                #Obtener la ultima id
                foreach $linea (@contenidofichero){
                        @campos = split / /, $linea;
                        $id = $campos[0];
                       
                }

                $numero_lineas = @contenidofichero;
                $encontrado = 0;
               
                foreach my $fichero_directorio (@contenido_directorio){
                        my $direccion_absoluta =  $directorio ."/". $fichero_directorio;
                        foreach my $linea (@contenido_fichero){
                                @campos = split / /, $linea;
                                my $orden = chomp($campos[-1]);
                                $id = $campos[1];
                                if($direccion_absoluta ne $orden){
                                        if(-r $direccion_absoluta && -x $direccion_absoluta && !(-d $direccion_absoluta)){
                                                $encontrado++;
                                                if ($encontrado == $numero_lineas){
                                                        $id ++;
                                                        my $min = 0;
                                                        my $dia = "*";
                                                        my $mes = "*";
                                                        my $dia_semana = "*";
               
                                                        print FICHERO "$id $min $hora $dia $mes $dia_semana                                                                             $direccion_absoluta\n";  
                 
                                                }
                                        }
                                }
                        }              
        }       }
       
        else{
                open (FICHERO, ">$fichero");
                 
                foreach my $fichero_directorio (@contenido_directorio){
                        my $direccion_absoluta =  $directorio ."/". $fichero_directorio;
                        if(-r $direccion_absoluta && -x $direccion_absoluta && !(-d $direccion_absoluta)){
                                $id ++;
                                my $min = 0;
                                my $dia = "*";
                                my $mes = "*";
                                my $dia_semana = "*";
               
                                print FICHERO "$id $min $hora $dia $mes $dia_semana $direccion_absoluta \n";  
               
                        }
     
                }
        }
        close (FICHERO);
}
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4


Mi problema es que cuando ejecuto la función por primera vez no me da ningún problema, pero cuando la vuelvo a ejecutar me genera ese error:

Código: Seleccionar todo
readline() on unopened filehandle FICHERO
y no sé por qué se produce. Espero que alguien me pueda ayudar. Muchas gracias.
jbgae
Perlero nuevo
Perlero nuevo
 
Mensajes: 4
Registrado: 2008-05-02 18:28 @811

Publicidad

Notapor explorer » 2008-05-03 12:11 @549

¡Huy, qué lío!

Estás leyendo el <FICHERO> que ha sido cerrado antes (hay un close() al final) y luego haces un open(). Da la sensación de que no es el orden correcto. Prueba a ponerlo al revés. El error dice que en un momento dado el manipulador FICHERO no ha sido abierto.

Lo normal es poner un close() antes de hacer un open(). O, como tienes en este caso, un open() en modo lectura/escritura, primero haces el open(), luego lo lees y después ya puedes escribir en él. Y cerrarlo con un close() al final.

P.D. Es recomendable seguir el hilo anterior y no abrir nuevos hilos, si el problema se refiere al mismo programa.
Última edición por explorer el 2008-09-01 17:08 @756, editado 1 vez en total
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor jbgae » 2008-05-03 12:36 @567

Muchas gracias de nuevo, la verdad que ha sido un despiste pero por más que lo tenía delante no era capaz de ver el fallo.
jbgae
Perlero nuevo
Perlero nuevo
 
Mensajes: 4
Registrado: 2008-05-02 18:28 @811


Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado