Class::ReturnValue(3) A return-value object that lets you treat it

DESCRIPTION

Class::ReturnValue is a ``clever'' return value object that can allow code calling your routine to expect:
    a boolean value (did it fail) or a list (what are the return values)

EXAMPLE

    sub demo {
        my $value = shift;
        my $ret = Class::ReturnValue->new();
        $ret->as_array('0', 'No results found');
    
        unless($value) {
            $ret->as_error(errno => '1',
                               message => "You didn't supply a parameter.",
                               do_backtrace => 1);
        }
        return($ret->return_value);
    }
    if (demo('foo')){ 
        print "the routine succeeded with one parameter";
    }
    if (demo()) {
        print "The routine succeeded with 0 paramters. shouldn't happen";
    } else {
        print "The routine failed with 0 parameters (as it should).";
    }
    my $return = demo();
    if ($return) {
        print "The routine succeeded with 0 paramters. shouldn't happen";
    } else {
        print "The routine failed with 0 parameters (as it should). ".
              "Stack trace:\n".
        $return->backtrace;
    }
    my @return3 = demo('foo');
    print "The routine got ".join(',',@return3).
          "when asking for demo's results as an array";
    my $return2 = demo('foo');
    unless ($return2) {
        print "The routine failed with a parameter. shouldn't happen.".
             "Stack trace:\n".
        $return2->backtrace;
    }
    my @return2_array = @{$return2}; # TODO: does this work
    my @return2_array2 = $return2->as_array;

METHODS

new
Instantiate a new Class::ReturnValue object
as_array
Return the 'as_array' attribute of this object as an array.
as_array [ARRAY]
If $self is called in an array context, returns the array specified in ARRAY
as_error HASH
Turns this return-value object into an error return object. TAkes three parameters:

    message
    do_backtrace
    errno 
    'message' is a human readable error message explaining what's going on
    'do_backtrace' is a boolean. If it's true, a carp-style backtrace will be 
    stored in $self->{'backtrace'}. It defaults to true
    errno and message default to undef. errno _must_ be specified. 
    It's a numeric error number.  Any true integer value  will cause the 
    object to evaluate to false in a scalar context. At first, this may look a 
    bit counterintuitive, but it means that you can have error codes and still 
    allow simple use of your functions in a style like this:
        if ($obj->do_something) {
            print "Yay! it worked";
        } else {
            print "Sorry. there's been an error.";
        }
        as well as more complex use like this:
        my $retval = $obj->do_something;
        
        if ($retval) {
            print "Yay. we did something\n";
            my ($foo, $bar, $baz) = @{$retval};
            my $human_readable_return = $retval;
        } else {
            if ($retval->errno == 20) {
                die "Failed with error 20 (Not enough monkeys).";
            } else {
                die  $retval->backtrace; # Die and print out a backtrace 
            }
        }
errno
Returns the errno if there's been an error. Otherwise, return undef
error_message
If there's been an error return the error message.
backtrace
If there's been an error and we asked for a backtrace, return the backtrace. Otherwise, return undef.
error_condition
If there's been an error, return undef. Otherwise return 1

AUTHOR

    Jesse Vincent <[email protected]>

BUGS

    This module has, as yet, not been used in production code. I thing
    it should work, but have never benchmarked it. I have not yet used
    it extensively, though I do plan to in the not-too-distant future.
    If you have questions or comments,  please write me.
    If you need to report a bug, please send mail to 
    <[email protected]> or report your error on the web
    at http://rt.cpan.org/

COPYRIGHT

    Copyright (c) 2002,2003,2005,2007 Jesse Vincent <[email protected]>
    You may use, modify, fold, spindle or mutilate this module under
    the same terms as perl itself.

POD ERRORS

Hey! The above document had some coding errors, which are explained below:
Around line 97:
'=item' outside of any '=over'
Around line 264:
=cut found outside a pod block. Skipping to next block.
Around line 296:
You forgot a '=back' before '=head1'