and '' (empty string) as false in scalar context. It evaluates () (empty list) as false in list context. Any other string evaluates as true. I don't see what's wrong with that; if "No" evaluates false, what about "NO", "no", "N" ? What about "Non", "Niet", "Nein" and "La'" ?