Pregunta

No sé qué podría estar haciendo mal con esta simple transacción, pero no funciona:

print "OK? (y or n)\n";
$ans = <>;
print "\n";
if($ans eq "y"){print $ans;}

Básicamente quiero saber cómo probar la entrada del usuario. Este pequeño código no funcionará para mí. Solo intento imprimir $ans si el usuario ingresa y.

¿Alguna sugerencia?

EDITAR: - También he intentado comillas simples

¿Fue útil?

Solución

Estás haciendo un par de cosas mal.

(1) No utilice el operador de diamante (< >) cuando desee < STDIN > ;. El operador de diamantes también leerá archivos de @ARGV, que probablemente no desee.

(2) $ ans nunca será igual a " y " a menos que lo comas primero. Tendrá una nueva línea al final.

Otros consejos

Una cura para todas las variables de contenido misterioso:

use Data::Dumper;
$Data::Dumper::Useqq = 1; # show newlines, tabs, etc in visible form
$Data::Dumper::Terse = 1;
print '$ans is really: ', Dumper($ans);

Aunque su pregunta directa ha sido respondida, es posible que desee buscar alternativas como Término :: Readline

¿Has probado:

if($ans eq 'y'){print $ans;}

?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top