Frankly, if something really goes wrong in a sub so that the very purpose of the program can't be achieved, I do not see any reason not to
die (or, better, to
croak or possibly to
confess) within the sub.
I am not saying that you should always die when something goes wrong, it depends on the context, sometimes you can recover from an error (for example, in an interactive program, you would probably want to give your user another chance to give the right arguments to your program), I am only saying that when an error is severe enough, especially in a non-interactive program, there is no reason to bend over backward to avoid using die or an equivalent within a sub.