• Publicidad

Fallos sintácticos y avisos (warning)

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

Re: Fallos sintácticos y avisos (warning)

Notapor gonzal » 2012-01-24 15:34 @690

Perdona, intento explicarme mejor:

Cuando ejecuto la orden "mostrar_historico", debería de mostrarme por pantalla la lista de comandos ejecutados anteriormente numerados, de la forma descrita anteriormente.

En mi programa, al ejecutar esa orden, no me aparecen los comandos enumerados, y encima me aparecen todos los comandos que he ejecutado a lo largo de todo el día, dando igual si he salido del programa una o varias veces.

Y en este caso, a parte de estar numerados, deberían de salir en pantalla sólo los comandos ejecutados, por así decirlo, en esa sesión del programa. Es decir, que cuando ejecuto el comando "salir", los datos del fichero "HISTORICO" deberían de borrarse para que la próxima vez que lo ejecutase empezara de cero.
gonzal
Perlero nuevo
Perlero nuevo
 
Mensajes: 25
Registrado: 2009-05-05 09:03 @419

Publicidad

Re: Fallos sintácticos y avisos (warning)

Notapor explorer » 2012-01-24 16:10 @715

El programa está haciendo lo que le has dicho que haga:
  • los comandos se piden en cargar_prompt()
  • allí, se llama a gestionar_comando()
  • y lo primero que hace dentro de gestionar_comando() es... guardar el comando en el histórico, llamando a guardar_historico()
Así que el programa sí que va guardando en el fichero histórico todos los comandos escritos, y además, de forma añadida, así que el fichero de histórico nunca es borrado.

Y cuando ejecutas el mostrar_historico, se llama a la rutina comando_mostrar_histórico(), que abre el fichero, y lo vuelca a pantalla. Y lo hace tal cual, sin poner números.

Entonces, si quieres que el programa haga una cosa distinta, deberás empezar a editarlo. Por ejemplo, la línea 527
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1.   map(print, @file);
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4
es donde sacar el fichero en pantalla. Ahí podemos poner los números:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. my $i = 1;
  2. for (@file) { print "$i $_"; $i++ }
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
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: Fallos sintácticos y avisos (warning)

Notapor gonzal » 2012-01-24 16:22 @723

Vaya, visto así parece hasta fácil.. :shock:

Ahora ya sí me salen los comandos ejecutados numerados, pero me falta que cuando ejecute la orden "salir", se borren todos los comandos ya guardados en el fichero histórico, para que al ejecutarla después de otra secuencia de comandos no aparezcan los anteriores.

Y esto deberíamos hacerlo modificando líneas de código aquí, ¿no?

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #Sale del programa
  2. sub comando_salir
  3. {
  4.         print "Salimos a petición del usuario.\n";
  5.         return(2);
  6. }
  7.  
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
gonzal
Perlero nuevo
Perlero nuevo
 
Mensajes: 25
Registrado: 2009-05-05 09:03 @419

Re: Fallos sintácticos y avisos (warning)

Notapor explorer » 2012-01-24 22:41 @987

Entonces... si hay que borrar el fichero antes de salir, eso quiere decir que el fichero histórico solo existe mientras el programa se está ejecutando... y de ahí deducimos que NO es necesario tener un fichero aparte, ya que podemos guardar los comandos históricos en un simple array (con un simple push()).

¡Ale! Te he ahorrado 17 líneas de 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

Re: Fallos sintácticos y avisos (warning)

Notapor gonzal » 2012-01-25 03:46 @198

¡Je,je,je! ese es el problema, que el fichero historico.txt sí tiene que existir. Lo que no sé es cómo borrar su contenido una vez ejecutada la orden "salir".
gonzal
Perlero nuevo
Perlero nuevo
 
Mensajes: 25
Registrado: 2009-05-05 09:03 @419

Re: Fallos sintácticos y avisos (warning)

Notapor explorer » 2012-01-25 06:13 @300

O sea... que el archivo debe estar, pero vacío... Muy bien...

Con la función truncate() puedes ponerlo a 0:

truncate $config->{"HISTORICO"}, 0;

Más información en perldoc -f truncate.
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: Fallos sintácticos y avisos (warning)

Notapor gonzal » 2012-01-25 07:02 @334

¡Perfecto! Qué de cosas estoy aprendiendo. Ya hace lo que necesitaba que hiciese. Con la función truncate() todo solucionado, al introducirla en la subrutina salir. Gracias una vez más, explorer.
gonzal
Perlero nuevo
Perlero nuevo
 
Mensajes: 25
Registrado: 2009-05-05 09:03 @419

Re: Fallos sintácticos y avisos (warning)

Notapor gonzal » 2012-01-31 10:40 @486

Bueno, y ya para que todas las salidas de las pruebas requeridas salgan a la perfección tengo dos dudillas.

La primera es que cuando ejecuto las órdenes, por ejemplo:

Sintáxis: [ Descargar ] [ Ocultar ]
  1. mostrar_directorio ../home 


la salida correcta debería de ser:

Sintáxis: [ Descargar ] [ Ocultar ]
  1. sin_r (Directorio) >>>> ERROR: A <../home/sin_r> le falta el permiso de lectura. 
  2. sin_x (Directorio) >>>> ERROR: A <../home/sin_x> le falta el permiso de busqueda. 


mientras que en mi script me aparece sin esos errores que debería de salir:

Sintáxis: [ Descargar ] [ Ocultar ]
  1. sin_r (Directorio) 
  2. sin_x (Directorio) 


y la segunda y última duda, por fin, tanto para ti explorer como para mi (¡je,je!) es que ejecutando las órdenes, por ejemplo:

Sintáxis: [ Descargar ] [ Ocultar ]
  1. mostrar_usuario 2001 


La salida correcta sería:

Sintáxis: [ Descargar ] [ Ocultar ]
  1. ================================= 
  2. Nombre de usuario.........:alum1 ( 2001 ) 
  3. Grupo primario o principal:alumnos ( 2000 ) 
  4. Grupos secundarios: 
  5. 1 bin ( 2 ) 
  6. 2 sys ( 3 ) 
  7. 3 adm ( 4 ) 
  8. 4 dialout ( 20 ) 
  9. 5 users ( 1001 ) 
  10. Directorio de casa: ../home2/alum1 ( existe ) 
  11. Shell por defecto: /bin/bash ( existe ) 


Mientras que la que me sale a mí es todo correcto, pero, al final, cuando mostramos si existe o no el "shell por defecto" me sale distinto casi siempre, en esa salida en concreto sale así:

Sintáxis: [ Descargar ] [ Ocultar ]
  1. ================================= 
  2. Nombre de usuario.........:alum1 ( 2001 ) 
  3. Grupo primario o principal:alumnos ( 2000 ) 
  4. Grupos secundarios: 
  5. 1 bin ( 2 ) 
  6. 2 sys ( 3 ) 
  7. 3 adm ( 4 ) 
  8. 4 dialout ( 20 ) 
  9. 5 users ( 1001 ) 
  10. Directorio de casa: ../home2/alum1 ( existe ) 
  11. Shell por defecto: /bin/bash ( no existe ) 


De las más de 50 pruebas, todas me salen perfectas ya, llevo unos días mirando eso por si podía evitar preguntarlo pero no doy con el error...
gonzal
Perlero nuevo
Perlero nuevo
 
Mensajes: 25
Registrado: 2009-05-05 09:03 @419

Re: Fallos sintácticos y avisos (warning)

Notapor explorer » 2012-01-31 15:20 @680

Para el caso de mostrar_directorio ../home, pasa lo siguiente:
un fichero zip (que es el que has publicado con el contenido de la estructura de directorios), al ser descomprimido en un sistema Unix, no recupera las fechas, horas y permisos de los subdirectorios y archivos que tiene comprimidos. Así, los subdirectorios me los crea así:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
explorer@casa:~/Documentos/Desarrollo/Estructura directorios/script> ll ../home
total 16
drwxr-xr-x 2 explorer users 4096 sep  2 13:13 sin_x
drwxr-xr-x 2 explorer users 4096 sep  2 13:13 sin_r
drwxr-xr-x 6 explorer users 4096 sep 14 13:57 ..
drwxr-xr-x 4 explorer users 4096 sep 14 13:57 .
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4
y vemos que, efectivamente, los permisos de los subdirectorios salen bien en tu programa. No coinciden con la salida esperada, porque los permisos de los subdirectorios no son iguales a los que se hicieron en la prueba. Si quieres que salga lo mismo que aparece en la documentación, debes cambiar los permisos de esos subdirectorios:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
explorer@casa:~/Documentos/Desarrollo/Estructura directorios/script> chmod -x ../home/sin_x
explorer@casa:~/Documentos/Desarrollo/Estructura directorios/script> chmod -r ../home/sin_r
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4
y ya sale bien:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
(ayuda/salir)? mostrar_directorio ../home
../home (Directorio de partida)
|-sin_x(Directorio)>>>> ERROR: A <../home/sin_x> le falta el permiso de busqueda
|-sin_r(Directorio)>>>> ERROR: A <../home/sin_r> le falta el permiso de lectura
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


Para el segundo caso, el de mostrar_usuario 2001, fíjate que se está preguntando por la existe de un ejecutable que es externo a la estructura de ficheros de las pruebas. Si en tu sistema, existe '/bin/bash' entonces sí que lo muestra. Si no, muestra 'no existe'. Así que esa parte del programa también funciona.
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: Fallos sintácticos y avisos (warning)

Notapor gonzal » 2012-01-31 18:37 @817

¡Qué felicidad! Muchas gracias, explorer, serás el primero en enterarte del resultado del programa.

Estoy muy agradecido por tu ayuda, sin ella no creo que lo hubiese podido solucionar. He aprendido mucho con tus aportaciones. Siempre has solucionado mis dudas, no sólo diciéndome cómo sería la forma correcta, sino explicándomelo como un profesor.

Gracias.
gonzal
Perlero nuevo
Perlero nuevo
 
Mensajes: 25
Registrado: 2009-05-05 09:03 @419

AnteriorSiguiente

Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: Bing [Bot] y 23 invitados

cron