A Slight Diversion: die
Consider the following a large footnote, but in the middle of the page.
A filehandle that has not been successfully opened can still be used without even so much as a warning throughout the program.[67] If you read from the filehandle, you’ll get end-of-file right away. If you write to the filehandle, the data is silently discarded (like last year’s campaign promises).
Typically, you’ll want to check the result of the open and report an error if the result is not what you expect. Sure, you can pepper your program with stuff like:
unless (open (DATAPLACE,">c:/temp/dataplace")) {
print "Sorry, I couldn't create c:/temp/dataplace\n";
} else {
# the rest of your program
}But that sort of change is a lot of work. And it happens often enough
for Perl to offer a bit of a shortcut. The
die
function takes a list within optional parentheses, spits out that
list (like print) on the standard error output,
and then ends the Perl program with a nonzero
exit
status (generally indicating that something unusual
happened[68]). So,
rewriting the chunk of code above turns out to look like this:
unless (open DATAPLACE,">c:/temp/dataplace") {
die "Sorry, I couldn't create c:/temp/dataplace\n";
}
# rest of programBut we can go even one step further. Remember that we can use the
|| (logical or)
operator to shorten this up, as in:
open(DATAPLACE,">c:/temp/dataplace") || die "Sorry, I couldn't create c:/temp/dataplace\n";
So, the die gets executed only when the result of
the open is ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access