2009-03-03 5 views
2

Je ne sais pas ce que je pourrais faire mal avec cette opération simple, mais il ne fonctionne pas:Pourquoi ai-je des problèmes pour comparer les lignes d'entrée dans Perl?

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

Je veux essentiellement savoir comment tester l'entrée utilisateur. Ce petit bout de code ne marchera pas pour moi. J'essaie juste d'imprimer $ans si y est entré par l'utilisateur.

Des suggestions?

EDIT: - J'ai aussi essayé des guillemets simples

Répondre

14

Vous faites quelque chose de mal. (1) N'utilisez pas l'opérateur diamant (<>) si vous voulez <STDIN>. L'opérateur de diamant lira également les fichiers de @ARGV, que vous ne voulez probablement pas. (2) $ ans ne sera jamais égal à "y" à moins que vous ne l'écrasiez en premier. Il aura une nouvelle ligne à la fin.

+0

merci vous , pourquoi l'eff est-elle taguée sur un \ n? parce que je frappe entrer pour enregistrer ma réponse? il devrait auto-chomp si vous me demandez ... – CheeseConQueso

+0

Vous avez le "pourquoi" correct. Je suis sûr qu'il y a quelque chose dans http://perldoc.perl.org/perlvar.html qui permettra l'auto-chomping ou quelque chose. – mkb

+0

Non, Perl ne sera pas autochomp, bien que Cheese ait raison dans la plupart des cas. Je pense que Perl 6 fait autochomp par défaut. –

1

Bien que votre question directe a répondu, vous pouvez regarder des alternatives comme

5

Une panacée pour les variables de contenu mystérieux:

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