• Publicidad

Problema con el if else

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

Problema con el if else

Notapor Peich69 » 2013-03-20 15:52 @703

Hola,

Como es el primer mensaje que escribo lo primero será presentarme. Soy un proyecto de microbiólogo que quiere dedicarse a la bioinformática, pero mis conocimientos son nulos.

He leído el tutorial básico del foro y he empezado a hacer algunas cosillas con variables escalares.

He hecho este código y me ha salido bien:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. print "¿Cuantos años tienes?\n";
  2. $edad = <STDIN>;
  3. if ($edad < 18) {
  4. print "Eres menor de edad \n";
  5. } else {
  6. print "Eres mayor de edad \n";
Coloreado en 0.004 segundos, usando GeSHi 1.0.8.4


Pero al intentarlo con nombres no hay manera.

Este no funciona:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. print "Como te llamas? \n";
  2. $nombre = <STDIN>;
  3. $respuesta = Juan;
  4. if ($nombre eq $respuesta) {
  5. print "Bienvenido \n";
  6. } else {
  7. print "Aceso denegado \n";
  8. }
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Y la verdad, no entiendo por qué.

He buscado por el foro y no encuentro nada relacionado con esto, supongo que es demasiado chorras.
Pues eso, que agradecería mucho si alguien me puede responder a la primera de mis, probablemente, muchas dudas.
Gracias.
Peich69
Perlero nuevo
Perlero nuevo
 
Mensajes: 18
Registrado: 2013-03-19 08:49 @409

Publicidad

Re: Problema con el if else

Notapor explorer » 2013-03-20 17:17 @762

Bienvenido a los foros de Perl en Español, Peich69.

A la hora de leer desde el teclado debes tener en cuenta que lo que te devuelve el operador diamante (<STDIN>) es todo lo que ha introducido el usuario, incluido el carácter (o caracteres) de nueva línea (el usuario pulsó la tecla de Entrar en el teclado, para indicarle al programa que ha terminado de escribir la entrada que quiere enviarnos.

Entonces, lo primero que se suele hacer dentro de un programa, es quitar ese carácter (o caracteres), del final de la cadena de texto que acabamos de leer.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. use warnings;
  3.  
  4. print "¿Cómo te llamas? ";
  5. $nombre = <STDIN>;
  6. chomp($nombre);                            # quitamos los caracteres de nueva línea del final, si están
  7.  
  8. $respuesta = 'Juan';                       # las cadenas de caracteres constantes las ponemos con comillas simples
  9.  
  10. if ($nombre eq $respuesta) {
  11.     print "Bienvenido $respuesta\n";
  12. }
  13. else {
  14.     print "Acceso denegado\n";
  15. }
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: Problema con el if else

Notapor Peich69 » 2013-03-21 00:34 @065

Muchas gracias.

Entonces debo entender que si la variable escalar es una cadena de texto (constante) el carácter de nueva línea es interpretado como parte de esta cadena, pero si es numérico, el interprete entiende que es un número y no lo tiene en cuenta, ¿no?

Porque este programa se ejecuta correctamente:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. print "¿Contraseña?\n";
  2. $pass = <STDIN>;
  3. if ($pass == 1983) {
  4. print "Bienvenido \n";
  5. } else {
  6. print "Acceso denegado \n";
  7. }
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
Peich69
Perlero nuevo
Perlero nuevo
 
Mensajes: 18
Registrado: 2013-03-19 08:49 @409

Re: Problema con el if else

Notapor explorer » 2013-03-21 07:14 @343

El operador '==' es numérico, así que las dos partes de la comparación deben ser numéricas. Si alguna de ellas es una cadena de caracteres normal, Perl primero hace una conversión a número. Ese proceso de conversión comienza leyendo la cadena de caracteres desde la izquierda, intentando encontrar algún dígito, y se para cuando se acaba la cadena o se encuentra con algún carácter que ya pueda ser convertido a dígito. Comienza la conversión a número, y todo lo demás es descartado (incluido los caracteres de finales de línea).

Ejemplo:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. my $portal = "32 Puerta de San Andrés, Bogotá\n";
  2.  
  3. if ($portal == 32) {
  4.     print "Estamos en el portal número 32\n";
  5. }
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: Problema con el if else

Notapor Peich69 » 2013-03-28 15:43 @696

Ok, gracias
Peich69
Perlero nuevo
Perlero nuevo
 
Mensajes: 18
Registrado: 2013-03-19 08:49 @409


Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 17 invitados