Outside of an eval, this function prints the concatenated value
STDERR and exits with the current value of $!
If $! is 0, it exits with the value of
($? >> 8)
(which is the status of the last reaped child from a system, wait,
close on a pipe, or `command`).
($? >> 8) is 0, it exits with 255. If
LIST is unspecified,
the current value of the
$@ variable is propagated, if any.
Otherwise the string
"Died" is used as the default.
die "Can't cd to spool: $!\n" unless chdir '/usr/spool/news'; chdir '/usr/spool/news' or die "Can't cd to spool: $!\n"
(The second form is generally preferred, since the important part is the chdir.)
Within an eval, the function sets the $@ variable equal to the error message that would have been produced otherwise, and aborts the eval, which then returns the undefined value. The die function can thus be used to raise named exceptions that can be caught at a higher level in the program. See the section on the eval function later in this chapter.
If the final value of
LIST does not end in a newline, the current
script filename, line number, and input line number (if any) are
appended to the message, as well as a newline. Hint: sometimes
", stopped" to your message will cause it to
make better sense when the string
"at scriptname line 123" is
appended. Suppose you are running script canasta:
die "/etc/games is no good"; die "/etc/games is no good, stopped";
which produces, respectively:
/etc/games is no good at canasta line 123. /etc/games is no good, stopped at canasta line 123.
If you want your own error messages reporting the filename and linenumber, use
__LINE__ special tokens:
die '"', __FILE__, '", line ', __LINE__, ", phooey on you!\n";
This produces output like:
"canasta", line 38, phooey on you!