Siechfred: ODER in Perl in Wirklichkeit ENTWEDER-ODER?

Beitrag lesen

Ich arbeite mich gerade durch ein Perl-Lehrbuch (konkret: Randal L. SCHWARTZ, Tom CHRISTIANSEN: Einführung in Perl, O'Reilly 1998) und stelle in einem Übungslisting fest, das Ergebnis einer ODER-Verknüpfung offensichtlich FALSE ist, wenn beide Teile TRUE sind!

Um welches geht's konkret?

Es geht um die Subroutine wort_richtig, die prüft, ob es für den eingegebenen Benutzernamen in dem am Beginn des Programms definierten Hash ein passendes Passwort gibt, falls nicht, soll "groucho" als Passwort akzeptiert werden. Interessanterweise führt die Eingabe "groucho", wenn es für den Benutzeramen ein reguläres Passwort gibt, zu einer Falsch-Meldung, was bei logisch ODER, wie ich es aus anderen Programmiersprachen kenne, nicht passieren dürfte!

Du musst es nur richtig schreiben. Du hast:

($worte{$einname} || "groucho") eq $einrateversuch

Die linke Seite wird wie folgt ausgewertet: Ist $worte{$einname} wahr? Wenn nein, nimm 'groucho'. Wenn ja, sei 'groucho' Banane. Daher wird der Vergleich eines Users mit existierendem Passwort *nie* gegen 'groucho' evaluieren. Das, was Du willst, ließe sich so ausdrücken:

elsif($einrateversuch eq $worte{$einname} or $einrateversuch eq 'groucho') {  
  return 1;  
}

Siechfred

--
Coping With Scoping (Deutsche Übersetzung)
Als Moderator habe ich keinerlei Humor, von dem ich wüsste.