UR

 view release on metacpan or  search on metacpan

lib/UR/Context/Transaction.pm  view on Meta::CPAN


    if (wantarray) {
        return ($result, $eval_error);
    } else {
        return $result;
    }
}

# eval function takes a block (&) sort of like CORE::eval
# eval will rollback on a caught die
sub eval(&) {
    my $is_failure = sub {
        my ($result, $eval_error) = @_;
        return $eval_error;
    };
    return eval_or_do($is_failure, @_);
}

# do function takes a block (&) sort of like CORE::do
# do will rollback on a false result as well as before re-throwing a caught die
sub do(&) {
    my $is_failure = sub {
        my ($result, $eval_error) = @_;
        return !$result || $eval_error;
    };
    my ($result, $eval_error) = eval_or_do($is_failure, @_);
    if ($eval_error) {
        croak $eval_error, "\t...propogated";
    }
    return $result;
}

lib/UR/Util.pm  view on Meta::CPAN

use warnings;
use strict;
require UR;
our $VERSION = "0.47"; # UR $VERSION;
use Cwd;
use Data::Dumper;
use Clone::PP;
use Config;
use Module::Runtime v0.014 qw(module_notional_filename);

sub on_destroy(&) {
    my $sub = shift;
    unless ($sub) {
        Carp::confess("expected an anonymous sub!")
    }
    return bless($sub, "UR::Util::CallOnDestroy");
}

# used only by the above sub
# the local $@ ensures that we this does not stomp on thrown exceptions
sub UR::Util::CallOnDestroy::DESTROY { local $@; shift->(); }



( run in 0.942 second using v1.01-cache-2.11-cpan-49f99fa48dc )