• Publicidad

Switch

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

Switch

Notapor newperlero » 2011-10-26 05:25 @267

¡Buenas!

Estoy teniendo problemas a la hora de usar un switch: dado un dato, debo realizar una u otra acción. El problema es que el dato a veces es 0, y cuando es cero, entra en when 0, pero me he encontrado que, ante una entrada defectuosa de un usuario o por cualquier otro motivo, si $var vale abc, entra en when 0, y luego en default.

¿Por qué está pasando esto?

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. chomp(my $var=<STDIN>);
  2. given($var){
  3.         when(1){
  4.                 say "1";
  5.         }
  6.         when(2){
  7.                 say "2";
  8.         }
  9.         when(3){
  10.                 say "3";
  11.         }
  12.         when(0){
  13.                 say "0";
  14.         }
  15.         default{
  16.                 die "Y que hago yo con esto?";
  17.         }
  18. }
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4
Última edición por newperlero el 2011-10-26 06:18 @304, editado 1 vez en total
newperlero
Perlero nuevo
Perlero nuevo
 
Mensajes: 42
Registrado: 2011-07-15 06:38 @318

Publicidad

Re: Switch

Notapor explorer » 2011-10-26 06:42 @320

Pues... ejecutando ese código, y metiendo 'abc', me sale el aviso de que 'abc' no se puede usar en una comparación numérica...

Es mejor hacer antes un

$var += 0;

para pasarlo a número, y luego hacer la condición múltiple.

Sería mejor saber, realmente, qué es lo que quieres hacer.
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

Re: Switch

Notapor newperlero » 2011-10-26 06:56 @330

Al final lo pude arreglar buscando otra cadena en el código, pero la pregunta era simplemente para saber:

¿Por qué en el switch, si introducen 0 por STDIN, entra en when(0), pero si introducen otra cosa, también entra? ¿Por qué entra en when(0) cuando meto "casa", y no en when(1)?

Haciendo un switch, al declarar when(0), ¿esto tiene una connotación especial? Tenía entendido que para cualquier caso en el switch que no matcheara con ningún when() saldría por default{}, solamente.
newperlero
Perlero nuevo
Perlero nuevo
 
Mensajes: 42
Registrado: 2011-07-15 06:38 @318

Re: Switch

Notapor explorer » 2011-10-26 07:50 @368

Yo sospecho que, en la primera comparación numérica, el contenido de la variable es transformada en número, y la conversión de una cadena 'abc' a número, siempre es 0.

Una solución, entonces, es hacer comparaciones alfanuméricas:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1.     chomp(my $var=<STDIN>);
  2.     given($var){
  3.             when('1'){
  4.                     say "1";
  5.             }
  6.             when('2'){
  7.                     say "2";
  8.             }
  9.             when('3'){
  10.                     say "3";
  11.             }
  12.             when('0'){
  13.                     say "0";
  14.             }
  15.             default{
  16.                     die "¿Y qué hago yo con esto?\n";
  17.             }
  18.     }
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
Y ya funciona.
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

Re: Switch

Notapor newperlero » 2011-10-26 08:30 @396

Touché. Tienes toda la razón.

Gracias, explorer
newperlero
Perlero nuevo
Perlero nuevo
 
Mensajes: 42
Registrado: 2011-07-15 06:38 @318


Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: Google [Bot] y 1 invitado