Either warnings or strict would have caught your mistake.
In your case false is caught by the "poetry
optimization" and interpreted as the string "false" which
is not undef, '', or 0, and therefore is a true value.
Comment on Re (tilly) 1: Impatience: sleep while not false