- local $_=ref(tied(%{$self->{"parent"}}))."::".$funcname;
- return if /^(?:Tie::StdHash)?::(?:DESTROY|UNTIE)$/;
- tied(%{$self->{"parent"}})->$_(@funcargs);
+ local $@=undef();
+ my $parent_tied=tied(%{$self->{"parent"}});
+ my $destroy=1 if $funcname eq "DESTROY" || $funcname eq "UNTIE";
+ return if !defined($parent_tied) && $destroy;
+ my $r=eval {
+ $parent_tied->$funcname(@funcargs);
+ };
+ return $r if !$@ || ($destroy && $@=~/^Can't locate object method "$funcname" via package ".*" at /);
+ confess $@;