X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FMoo%2F_Utils.pm;h=2ee545c392250e93324a608f01d7dfa59b775dc5;hb=59812c87b1b00da1098f22c77e02db83ff594f22;hp=6b1a5b3ff25f100f91e3b7730d7938d75d473da3;hpb=56ffe19d51215674fb162c30ba9c5dc1951402c5;p=gitmo%2FMoo.git diff --git a/lib/Moo/_Utils.pm b/lib/Moo/_Utils.pm index 6b1a5b3..2ee545c 100644 --- a/lib/Moo/_Utils.pm +++ b/lib/Moo/_Utils.pm @@ -23,7 +23,7 @@ sub _install_modifier { my ($into, $type, $name, $code) = @_; if (my $to_modify = $into->can($name)) { # CMM will throw for us if not - require Sub::Defer; + { local $@; require Sub::Defer; } Sub::Defer::undefer_sub($to_modify); } @@ -40,13 +40,14 @@ sub _load_module { # can't just ->can('can') because a sub-package Foo::Bar::Baz # creates a 'Baz::' key in Foo::Bar's symbol table return 1 if grep !/::$/, keys %{_getstash($_[0])||{}}; - require "${proto}.pm"; + { local $@; require "${proto}.pm"; } return 1; } sub _maybe_load_module { return $MAYBE_LOADED{$_[0]} if exists $MAYBE_LOADED{$_[0]}; (my $proto = $_[0]) =~ s/::/\//g; + local $@; if (eval { require "${proto}.pm"; 1 }) { $MAYBE_LOADED{$_[0]} = 1; } else { @@ -65,4 +66,20 @@ sub _get_linear_isa { our $_in_global_destruction = 0; END { $_in_global_destruction = 1 } +sub STANDARD_DESTROY { + my $self = shift; + + my $e = do { + local $?; + local $@; + eval { + $self->DEMOLISHALL($_in_global_destruction); + }; + $@; + }; + + no warnings 'misc'; + die $e if $e; # rethrow +} + 1;