my intuition from C, where filehandles are NULL when fopen fails
That's because fopen returns the "file handle": it can only use that to indicate an error, all the arguments are const. C has no choice. If you think about it, perl open returning false on error is the same as C fopen, which also returns false on error.