in reply to Handling non-fatal method error strings without exceptions or globals?

Another option is to have your functions return multiple values:
my ($result, $error) = function($arg); if ($error) { # do something... }

One caveat is that if for some reason you want to disregard the error and only want the result, you need to remember to use parentheses:

($result) = function($arg); # get the result only $result = function($arg); # WRONG!!! gets the error only