Cita:
Iniciado por jferrero Ya lo dice el manual del módulo: si el usuario elige una opción que no está en el menú, devolverá un valor indefinido.
Lo que puedes hacer es meter la llamada al menú dentro de un bucle que no termine mientras el usuario no haya metido un valor válido.
Código Perl:
Ver originaldo {
# llamamos al menú
} until ($answer);
Lo intenté como dijiste, pero me devuelve un error
Código PERL:
Ver original1 #!/usr/bin/perl
2
3 use strict;
4 use warnings;
5 use diagnostics;
6 use Term::Menu;
7
8 my $var = 0;
9 my $sede = 0;
10 #my $answer = 0;
11
12 my $prompt = Term::Menu->new(
13 beforetext => 'Por favor, elija una de las siguientes opciones:',
14 aftertext => 'Introduzca la sede por favor ',
15 nooptiontext => 'No seleccionaste ninguna opcion',
16 toomanytries => 'Inicia el programa nuevamente y pulse alguna tecla por favor ',
17 );
18 do {
19
20 my $answer = $prompt->menu(
21 resguardo => ["resguardo", 1 ],
22 sqlaltas => ["sqlaltas", 2 ],
23 sqlcronograma => ["sqlcronogramas", 3 ],
24 Ayuda => ["Ayuda sobre el Programa", 4 ],
25 Salir => ["Salir del Programa", 5 ],
26 );
27 } until ($answer);
28
31
32 if ($answer eq 'resguardo') {
33 print "Has elegido sede resguardo "; 34 }
35 elsif ($answer eq 'sqlaltas') {
36 print "Has elegido sede sqlaltas "; 37 }
Código:
Global symbol "$answer" requires explicit package name at ./test.pl line 27.
Global symbol "$answer" requires explicit package name at ./test.pl line 30.
Global symbol "$answer" requires explicit package name at ./test.pl line 32.
Global symbol "$answer" requires explicit package name at ./test.pl line 35.
Execution of ./test.pl aborted due to compilation errors (#1)
(F) You've said "use strict vars", which indicates that all variables
must either be lexically scoped (using "my"), declared beforehand using
"our", or explicitly qualified to say which package the global variable
is in (using "::").
Uncaught exception from user code:
Global symbol "$answer" requires explicit package name at ./test.pl line 27.
Global symbol "$answer" requires explicit package name at ./test.pl line 30.
Global symbol "$answer" requires explicit package name at ./test.pl line 32.
Global symbol "$answer" requires explicit package name at ./test.pl line 35.
Execution of ./test.pl aborted due to compilation errors.
at ./test.pl line 37
root@monitor:/home/dperez# vim test.pl
Y si declaro la variable en la linea 10
10 my $answer = 0;
No me devuelve ningún error, pero me pregunta continuamente las opciones del menú, aunque elija una correcta, no entiendo porque se comporta así
Código:
Por favor, elija una de las siguientes opciones:
1) resguardo
2) sqlaltas
3) sqlcronogramas
4) Ayuda sobre el Programa
5) Salir del Programa
Introduzca la sede por favor 3
Por favor, elija una de las siguientes opciones:
1) resguardo
2) sqlaltas
3) sqlcronogramas
4) Ayuda sobre el Programa
5) Salir del Programa
Introduzca la sede por favor 9
No seleccionaste ninguna opcion
Inicia el programa nuevamente y pulse alguna tecla por favor
Por favor, elija una de las siguientes opciones:
1) resguardo
2) sqlaltas
3) sqlcronogramas
4) Ayuda sobre el Programa
5) Salir del Programa
Introduzca la sede por favor 1
Por favor, elija una de las siguientes opciones:
1) resguardo
2) sqlaltas
3) sqlcronogramas
4) Ayuda sobre el Programa
5) Salir del Programa
Introduzca la sede por favor