Die Variable response hat nach dem Aufruf `echo \""#{passwort}"\" |
cracklib-check` den Wert "X9d3dlgu4j OK\n"
Erwartungsgemäß gibt response.ends_with?('OK\n') true zurück
Trotzdem wird in der folgenden Version der Methode PasswortOK? der
then-Block der if-Klausel ausgeführt:
1 | def PasswortOK?
|
2 | response = `echo \""#{passwort}"\" | cracklib-check`
|
3 | if !response.ends_with?('OK\n')
|
4 | errors.add(:passwort, "Das Passwort ist zu schwach")
|
5 | end
|
6 | end
|
Warum?
Wenn ich den Code folgendermaßen umbaue:
1 | def PasswortOK?
|
2 | response = `echo \""#{passwort}"\" | cracklib-check`
|
3 | if response !~ /OK\n$/
|
4 | errors.add(:passwort, "Das Passwort ist zu schwach")
|
5 | end
|
6 | end
|
wird – korrekter Weise – der then-Block nicht ausgeführt.
Was ist das faul?