¿Por qué el EQ no funciona con mi entrada de cadena?
-
28-10-2019 - |
Pregunta
Acabo de comenzar a aprender Perl y a saber, aprender flujo del programa: principales diferencias notables entre evaluar las cadenas y el número y usar los operadores apropiados. Script simple, tengo aquí que me está volviendo loco, ya que es una declaración súper simple, si más, que debería en "Mike" ingresar y no funciona. ENCONTRA LA DISTACIÓN DE OSE. Por favor ayuda
#!C:\strawberry\perl\bin\perl.exe
use strict;
#use warnings;
#use diagnostics;
print("What is your name please?");
$userName = <STDIN>;
if($userName eq "mike"){
print("correct answer");
}
else{
print("Wrong answer");
}
Solución
Mientras leía tu pregunta, pensé que estabas a punto de tener un problema con las cadenas versus los valores numéricos en un igual. Considere el siguiente caso:
#!/usr/bin/env perl
use strict;
use warnings;
print("What is the meaning of life, the universe and everything? ");
chomp(my $response = <STDIN>);
if ( $response == 42) {
#if ( 42 ~~ $response ) {
print "correct answer\n";
} else {
print "Wrong answer\n" ;
}
Prueba los dos diferentes if
declaraciones. Responde algo bueno como family
y mira lo que pasa. los ~~
es el operador de partidos inteligentes que ha ayudado a algunos de este problema en Perl. Lea más al respecto aquí (en "Smart Matching in Detleal"). Tenga en cuenta también el uso en línea del chomp
operador.
Otros consejos
Intente agregar una llamada a Chomp después de obtener su valor de Stdin:
$userName = <STDIN>;
chomp($userName);
Dado que el valor se lee en Stdin tendrá un carácter nuevo en el final. El chomp () incorporado eliminará una nueva línea desde el final de una cadena.