2009-03-03 8 views
2

Ich weiß nicht, was ich mit dieser einfachen Transaktion wurde falsch machen könnte, aber es funktioniert nicht:Warum kann ich Zeilen in Perl nicht vergleichen?

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

Ich mag im Grunde weiß, wie die Benutzereingabe zu testen. Dieses kleine Stück Code wird für mich nicht funktionieren. Ich versuche nur $ans zu drucken, wenn y vom Benutzer eingegeben wird.

Irgendwelche Vorschläge?

EDIT: - Ich habe auch einfache Anführungszeichen versucht

Antwort

14

Sie machen ein paar Dinge falsch.

(1) Verwenden Sie nicht den Diamant-Operator (<>), wenn Sie möchten <STDIN>. Der Diamant-Operator liest auch Dateien von @ARGV, die Sie wahrscheinlich nicht möchten.

(2) $ ans wird nie gleich "y" sein, es sei denn, Sie chomp es zuerst. Es wird am Ende eine neue Zeile haben.

+0

Ihnen danken , warum das eff markiert es auf a \ n? weil ich Enter drücke, um meine Antwort zu registrieren? es sollte automatisch chomp, wenn Sie mich fragen ... – CheeseConQueso

+0

Sie haben das "warum" richtig. Ich bin sicher, dass es in http://perldoc.perl.org/perlvar.html etwas gibt, das Auto-Chomping oder so etwas erlaubt. – mkb

+0

Nein, Perl wird nicht autochomp, obwohl Cheese in den meisten Fällen richtig ist. Ich denke, dass Perl 6 standardmäßig autochomp ist. –

1

Obwohl Ihre direkte Frage beantwortet wurde, können Sie auf Alternativen aussehen wollen wie

5

Ein Allheilmittel für Variablen mysteriöser Inhalt:

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