elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Recuerda que debes registrarte en el foro para poder participar (preguntar y responder)


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  problema con switch en perl
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: problema con switch en perl  (Leído 2,757 veces)
Drewermerc

Desconectado Desconectado

Mensajes: 259



Ver Perfil WWW
problema con switch en perl
« en: 15 Junio 2014, 21:28 pm »

Hola a todo.

Bueno apenas estoy aprendiendo perl y el problema que tengo es que en este programa no me funciona switch quisiera ver si me podrian ayudar para saber cual es el problema.

Tambien quería comentarles  esta duda es como comparar caracteres en until ya que intente de varias formas pero me dice que hay un error con una ociones que intente y cuando uso  $opcion eq "s"  si corrre bien el programa pero nunca se cumple la condicion.

Código
  1. #!/usr/bin/perl
  2. use Switch;
  3. use warnings;
  4. use strict;
  5.  
  6. sub operaciones;
  7.  
  8.  
  9. my $numuno = 0;
  10. my $numdos = 0;
  11. printf "Introduce los dos numero para realizar las operaciones\n";
  12. $numuno = <stdin>;
  13. $numdos  = <stdin>;
  14. operaciones();
  15.  
  16. sub operaciones
  17. {
  18. my $suma = 0;
  19. my $resta = 0;
  20. my $multiplicacion = 0;
  21. my $divicion = 0;
  22. my $operacion = 0;
  23. my $opcion = 0;
  24. do
  25. {
  26. print "Que operacion quieres hacer primero\n";
  27. print "1.suma\n";
  28. print "2.resta\n";
  29. print "3.multiplicacion\n";
  30. print "4.divicion\n";
  31. print "5.salir\n";
  32. $operacion = <stdin>;
  33. switch($operacion)
  34. {
  35. case 1
  36. {
  37. $suma = $numuno + $numdos;
  38. print "El resultad de la suma es: $suma\n";
  39. }
  40. case 2
  41. {
  42. $resta = $numuno - $numdos;
  43. print "El resultad de la suma es: $resta\n";
  44. }
  45. case 3
  46. {
  47. $multiplicacion = $numuno * $numdos;
  48. print "El resultad de la suma es: $multiplicacion\n";
  49. }
  50. case 4
  51. {
  52. $divicion = $numuno / $numdos;
  53. print "El resultad de la suma es: $divicion\n";
  54. }
  55. else
  56. {
  57. print "Opcion no valida\n";
  58. print  "Quieres elegir otra opciono quieres salir\n";
  59. $opcion = <stdin>;
  60. }
  61.  
  62. }
  63.  
  64.  
  65. }until( $opcion eq "s");
  66. #until( $opcion == 's');
  67. #until( $opcion == "s");
  68. #until( $opcion != "s");
  69.  
  70. }
  71.  


Tambien intente hacer el codigo de esta forma pero me da mucho errores y la unica forma de solucionarlos es poner cada vez que uso las variabes tengo que declararlas como locales poniendo my, quisiera que me dijeran cual es el metodo que debo usar ya que en varios ejemplos que e visto usan este segundo metodo de declarar primero la subrutina

Código
  1. #!/usr/bin/perl
  2. use Switch;
  3. use warnings;
  4. use strict;
  5.  
  6. sub operaciones
  7. {
  8. my $suma = 0;
  9. my $resta = 0;
  10. my $multiplicacion = 0;
  11. my $divicion = 0;
  12. my $operacion = 0;
  13. my $opcion = 0;
  14. do
  15. {
  16. print "Que operacion quieres hacer primero\n";
  17. print "1.suma\n";
  18. print "2.resta\n";
  19. print "3.multiplicacion\n";
  20. print "4.divicion\n";
  21. print "5.salir\n";
  22. $operacion = <stdin>;
  23. switch($operacion)
  24. {
  25. case 1
  26. {
  27. $suma = $numuno + $numdos;
  28. print "El resultad de la suma es: $suma\n";
  29. }
  30. case 2
  31. {
  32. $resta = $numuno - $numdos;
  33. print "El resultad de la suma es: $resta\n";
  34. }
  35. case 3
  36. {
  37. $multiplicacion = $numuno * $numdos;
  38. print "El resultad de la suma es: $multiplicacion\n";
  39. }
  40. case 4
  41. {
  42. $divicion = $numuno / $numdos;
  43. print "El resultad de la suma es: $divicion\n";
  44. }
  45. else
  46. {
  47. print "Opcion no valida\n";
  48. print  "Quieres elegir otra opciono quieres salir\n";
  49. $opcion = <stdin>;
  50. }
  51.  
  52. }
  53.  
  54.  
  55. }until( $opcion eq "s");
  56. #until( $opcion == 's');
  57. #until( $opcion == "s");
  58. #until( $opcion != "s");
  59.  
  60. }
  61.  
  62. my $numuno = 0;
  63. my $numdos = 0;
  64. printf "Introduce los dos numero para realizar las operaciones\n";
  65. $numuno = <stdin>;
  66. $numdos  = <stdin>;
  67. operaciones();
  68.  
  69.  

Bueno espero que me puedan ayudar.
Saludos.
Drewermerc.


En línea

daryo


Desconectado Desconectado

Mensajes: 1.070



Ver Perfil WWW
Re: problema con switch en perl
« Respuesta #1 en: 15 Junio 2014, 23:11 pm »

porque
Código
  1. $operacion = <stdin>;

devuelve una cadena puedes o cenvertir los case en cadenas o convertir operacion a entero:
cambia
Código
  1. switch($operacion)
por
Código
  1. switch(int($operacion))


En línea

buenas
explorer

Desconectado Desconectado

Mensajes: 101


Analista/Programador Perl


Ver Perfil
Re: problema con switch en perl
« Respuesta #2 en: 16 Junio 2014, 03:57 am »

Ya que estás aprendiendo Perl, te recomiendo que no uses el módulo Switch.

Siempre ha tenido errores. En estos momentos, marca que sólo tiene 4 errores denunciados, pero seguro que tiene más.

Fíjate lo que dice en su descripción:

Switch - A switch statement for Perl, do not use if you can use given/when

"No lo uses si puedes usar given/when".

given/when forma parte de los nuevos intérpretes de Perl, desde la versión v5.10. Para hacer uso de él (si tienes un Perl moderno), te vale con poner al principio del programa

use v5.10;

o también

use feature 'switch';

(Tienes más información sobre esto en perldoc perlsyn. Busca por la sección Switch statements)


La comparación de caracteres, efectivamente se hace con 'eq', pero... no te funciona porque en la línea 59, al leer desde el teclado, estás incluyendo el carácter de nueva línea (cuando el usuario pulsa la tecla de Entrar o Retorno).

Antes de hacer la comparación, debes asegurarte de que has eliminado esos caracteres, y sólo te quedas con la opción que el usuario ha elegido. Para ello, usa la función chomp(). Quedaría así:

Código
  1. $opcion = <stdin>;
  2.                                 chomp $opcion; # quitar caracteres de nueva línea

En línea

Drewermerc

Desconectado Desconectado

Mensajes: 259



Ver Perfil WWW
Re: problema con switch en perl
« Respuesta #3 en: 16 Junio 2014, 21:30 pm »

Hola amigos.
Gracias a los dos esos era los problemas que tenia ahora ya funciona bien el programa  y explorer no se que error te refieres ya que a mi no me arroja ese error y bueno investigare sobre esa funciones y bueno pues tengo la version 5.18 que si podre probar las funciones que me mencionaste.

Saludos.
Drewermerc.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Problema con Switch
Programación C/C++
higor24 2 3,492 Último mensaje 19 Noviembre 2010, 16:41 pm
por Fer995
Problema con el Switch en C « 1 2 »
Programación C/C++
Samnov 13 11,296 Último mensaje 6 Diciembre 2010, 15:05 pm
por winroot
Perl pregunta basica use Switch;
Scripting
Pablo Videla 0 1,632 Último mensaje 28 Octubre 2013, 18:41 pm
por Pablo Videla
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines