True() and true() functions return falsy values. Just... why? Actually, true() seems to be some broken "is true" checker. Only no arguments, "0" and "#" (why?) are falsy. Just use boolean directly (if you're using it as argument of function that takes boolean or in if/while statement), or if you're giving boolean result in function (from something not boolean), use "!!" operator.