IIRC these conditionals aren't reliable when using undef, as it's returned as a symbol, which is true?  Tests might prove me wrong ;)