Undef is a value, and one particular unique value, it is not a classification and it has nothing to do with bool/truth hood evaluation. Because its printable form is empty string, undef is false. In some systems, -1 is a "false" too (not in perl). Truthhood has to do with flow control. Undef is best used as a unique flag that can mean, error or no data, to separate empty string/0 from error or no data condition, 0 is valid data some times. Undef can't be stored to a file. Falsehood can be stored to a file.