It depends on what you want to have happen with STDERR and STDOUT. I prefer to send error and warning type messages to STDERR so that when someone is trying to redirect output to a file they still see the error messages; However, there are times though when STDOUT is used to communicate status to the user so he or she can tail -f or paginate it, and at those times writing to STDERR causes them pain (they have to redirect STDERR back into STDOUT with 2>&1, and not everyone knows how to do that). So which to use, die or print and exit, depends heavily on what type of program you are writing.
There are other benefits/drawbacks to using die:
- You can trap
diewith aneval, but not exit - You can run code when the program calls
dieby installing a signal handler for the__DIE__signal - You can easily override the
diefunction
Each of those has times where it is handy to be able to do them, and times when it is a pain that they can be done.