Perl en Español

  1. Home
  2. Tutoriales
  3. Foro
  4. Artículos
  5. Donativos
  6. Publicidad
 
Índice general » Mundo Perl » Básico » Fallos sintácticos y avisos (warning) Responder al tema
Nuevo tema


Página 3 de 3  [ 41 mensajes ]  Ir a página Anterior  1, 2, 3
 
Nota 2012-01-24 15:34 @690

Perlero Nuevo
Registrado: 2009-05-05 09:03 @419
Mensajes: 25
Re: Fallos sintácticos y avisos (warning)
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.


Nota 2012-01-24 16:10 @715
Avatar de Usuario
Administrador
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España
Mensajes: 10250
Re: Fallos sintácticos y avisos (warning)
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
Syntax: [ Download ] [ Hide ]
Using perl Syntax Highlighting
  1.   map(print, @file);
es donde sacar el fichero en pantalla. Ahí podemos poner los números:
Syntax: [ Download ] [ Hide ]
Using perl Syntax Highlighting
  1. my $i = 1;
  2. for (@file) { print "$i $_"; $i++ }

_________________
JF^D Perl programming


Nota 2012-01-24 16:22 @723

Perlero Nuevo
Registrado: 2009-05-05 09:03 @419
Mensajes: 25
Re: Fallos sintácticos y avisos (warning)
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?

Syntax: [ Download ] [ Hide ]
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.  


Nota 2012-01-24 22:41 @987
Avatar de Usuario
Administrador
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España
Mensajes: 10250
Re: Fallos sintácticos y avisos (warning)
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


Nota 2012-01-25 03:46 @198

Perlero Nuevo
Registrado: 2009-05-05 09:03 @419
Mensajes: 25
Re: Fallos sintácticos y avisos (warning)
¡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".


Nota 2012-01-25 06:13 @300
Avatar de Usuario
Administrador
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España
Mensajes: 10250
Re: Fallos sintácticos y avisos (warning)
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


Nota 2012-01-25 07:02 @334

Perlero Nuevo
Registrado: 2009-05-05 09:03 @419
Mensajes: 25
Re: Fallos sintácticos y avisos (warning)
¡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.


Nota 2012-01-31 10:40 @486

Perlero Nuevo
Registrado: 2009-05-05 09:03 @419
Mensajes: 25
Re: Fallos sintácticos y avisos (warning)
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:

Syntax: [ Download ] [ Hide ]
  1. mostrar_directorio ../home 


la salida correcta debería de ser:

Syntax: [ Download ] [ Hide ]
  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:

Syntax: [ Download ] [ Hide ]
  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:

Syntax: [ Download ] [ Hide ]
  1. mostrar_usuario 2001 


La salida correcta sería:

Syntax: [ Download ] [ Hide ]
  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í:

Syntax: [ Download ] [ Hide ]
  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...


Nota 2012-01-31 15:20 @680
Avatar de Usuario
Administrador
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España
Mensajes: 10250
Re: Fallos sintácticos y avisos (warning)
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í:
Syntax: [ Download ] [ Hide ]
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 .
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:
Syntax: [ Download ] [ Hide ]
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
y ya sale bien:
Syntax: [ Download ] [ Hide ]
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


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


Nota 2012-01-31 18:37 @817

Perlero Nuevo
Registrado: 2009-05-05 09:03 @419
Mensajes: 25
Re: Fallos sintácticos y avisos (warning)
¡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.


Nota 2012-02-13 17:06 @754

Perlero Nuevo
Registrado: 2009-05-05 09:03 @419
Mensajes: 25
Re: Fallos sintácticos y avisos (warning)
¡¡Por fin!! :D :D :D

¡Se acabó el script! Una vez más, explorer, muchas gracias por tu ayuda. He aprendido mucho y seguiré visitando este gran foro.

¡Un saludo!


Responder al tema  [ 41 mensajes ]  Ir a página Anterior  1, 2, 3

Reglas del Foro
No puedes abrir nuevos temas en este Foro
No puedes responder a temas en este Foro
No puedes editar tus mensajes en este Foro
No puedes borrar tus mensajes en este Foro
No puedes enviar adjuntos en este Foro

Publicidad

Socializa

Síguenos por Twitter

Suscríbete GRATUITAMENTE al Boletín de Perl en Español

Saltar a:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Traducción al español por Huan Manwë para phpbb-es.com
phpBB SEO