undef *is* always false. Again, I'm not talking about undef. That $!'s value is undefined (as opposed to $! being undefined) means $! could be 0, it could be -123, it could be the string "the answer to life, the universe, everything".
Comment on Re^6: No data received on client socket
:) If you read my post more carefully that is exactly what I was talking about. :)
Actually, just peeked at pp_sys.c of perl-5.8.8 and verified that $! is set to 0 unconditionally there with call to SETERRNO(0,0) before reading file handle. Thus you can safely rely on $!'s value even if no system error occures.