Allowing multiple opens form the same code is a great benefit, perhaps even the greatest, but who said it's the only one? davido
mentions a few others, all of which IMHO are valid.
Regarding "you do your error checking on open, not close", this is not quite correct. Close can have errors, e.g. when the file is a pipe that has been closed on the other side.
And regarding die, in the first instance, I was using it as a token for "any appropriate error handling I might choose to apply here". In the second instance, you can (and I often do) achieve protection from termination by catching the die with an eval somewhere up the call train.