Why: easier than the alternative 

sub do_something {
    # attempt to do something
    # return true  on success or
    # return false on failure
}
if( not do_something() ) {
    # now what?
    # what happened?
    # why?
}