NAME
die - raise an exception or bail out
SYNOPSIS
die LIST
DESCRIPTION
Outside an eval(), prints the value of
LIST to STDERR and exits with the current value of $! (errno). If $! is 0, exits with the value of
($? >> 8) (backtick `command` status). If ($? >> 8)
is 0, exits with 255. Inside an eval(), the error message is stuffed into
$@ and the eval() is terminated with the undefined value. This makes
die() the way to raise an exception.
Equivalent examples:
die "Can't cd to spool: $!\n" unless chdir '/usr/spool/news';
chdir '/usr/spool/news' or die "Can't cd to spool: $!\n"
If the value of
EXPR does not end in a newline, the current script
line number and input line number (if any) are also printed, and a newline
is supplied. Hint: sometimes appending ", stopped" to your message will cause it to make better sense when the string "at foo line 123" is appended. Suppose you are running script ``canasta''.
die "/etc/games is no good";
die "/etc/games is no good, stopped";
produce, respectively
/etc/games is no good at canasta line 123.
/etc/games is no good, stopped at canasta line 123.
If
LIST is empty and $@ already contains a value (typically from a previous eval) that value is
reused after appending "\t...propagated". This is useful for propagating exceptions:
eval { ... };
die unless $@ =~ /Expected exception/;
If $@ is empty then the string "Died" is used.
You can arrange for a callback to be run just before the die() does its deed, by setting the $SIG{__DIE__} hook. The associated handler will be called with the error text and can
change the error message, if it sees fit, by calling die() again. See $SIG{expr} for details on setting %SIG entries, and eval BLOCK for some examples.
Note that the $SIG{__DIE__} hook is called even inside
eval()ed blocks/strings. If
one wants the hook to do nothing in such situations, put
die @_ if $^S;
as the first line of the handler (see $^S).
DISCLAIMER
We are painfully aware that these documents may contain incorrect links and misformatted HTML. Such bugs lie in the automatic translation process that automatically created the hundreds and hundreds of separate documents that you find here. Please do not report link or formatting bugs, because we cannot fix per-document problems. The only bug reports that will help us are those that supply working patches to the installhtml or pod2html programs, or to the Pod::HTML module itself, for which I and the entire Perl community will shower you with thanks and praises.If rather than formatting bugs, you encounter substantive content errors in these documents, such as mistakes in the explanations or code, please use the perlbug utility included with the Perl distribution.
- --Tom Christiansen, Perl Documentation Compiler and Editor
Return to the Perl Documentation Index.
Return to the Perl Home Page.
