The code for Fatal would be a good place to start. Plus, that hierarchy of exceptions would be better called Exception::Class::IO. The same list of exceptions (Cannot open, Cannot close, Cannot read, EOF, etc) can be applied to sockets, files, and the like.
My criteria for good software:
Does it work?
Can someone else come in, make a change, and be reasonably certain no bugs were introduced?