2017-10-28 1 views
1

Ich begann gestern, Perl zu lernen. Ich habe diesen Code geschrieben:Wenn in Perl nicht funktioniert. Habe ich einen Fehler gemacht?

print "Please type in your password.\n"; 
print "Password: "; 
chomp($password = <>); 
if ($password == "admin") 
{ 
print "Password is correct!"; 
} 
else 
{ 
print "Password is incorrect!"; 
} 

Wenn ich schreibe „admin“ es sagt mir, dass das Passwort richtig ist, aber wenn ich jedes anderes Passwort schreibe es sagt mir das Gleiche. Es ist wie wenn das if nicht ausgeführt wird. Was kann ich tun?

+1

** Immer ** verwenden 'use strict; Verwende Warnungen qw (alle); '!!! – ikegami

Antwort

4

Zum Vergleichen von Strings wird der Operator eq verwendet. Ich habe diesen Fehler auch oft gemacht.

… 
if ($password eq "admin") 
… 

Wenn Sie den == Operator auf Strings verwenden, eine Zahl im String enthalten ist, umgewandelt: foo auf Null geht, 2foo geht an 2

+0

Können Sie erklären, wie die Strings mit dem Operator "==" so umgewandelt werden, dass sie gleich sind? Ich würde erwarten, dass sie mit diesem Operator verglichen werden, aber das ist offensichtlich nicht der Fall. – piojo

+2

Strings werten immer die Zahl Null aus. Hinweis "2foo" würde fehlschlagen. Siehe https://Stackoverflow.com/a/14046696 – xanoetux

+0

Oh, danke! Ich mixte die Zeichenkette-> Zahlenzwang mit Vektor-> Zahlenzwang. Ich bin schon eine Weile bei Perl 6, deshalb habe ich die impliziten Details vergessen, da in der nächsten Generation alles expliziter ist. – piojo

2

Perl verwendet eq statt == für String-Vergleich.

ändern

if ($password == "admin") 
{ 
    print "Password is correct!"; 
} 

Um

if ($password eq "admin") 
{ 
    print "Password is correct!"; 
} 
5

der Vergleichsoperator "==" wird verwendet, um Zahlen zu vergleichen, während der Operator "eq" verwendet wird, Strings zu vergleichen.

Verwandte Themen