Why? 4. It's 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?
}