X-Git-Url: http://git.jankratochvil.net/?p=MyWeb.git;a=blobdiff_plain;f=Hash.pm;h=b47bed9c6ceb4c2d29c0db558c8ace4d1c051010;hp=280c26b6c14f8d01f7acf60eedc1fed303156821;hb=a4810954a0bfff7b3d35c4d45b12f740b0ed661e;hpb=1c18d205aecccd477103e8c37e07f1a92f20bca6 diff --git a/Hash.pm b/Hash.pm index 280c26b..b47bed9 100644 --- a/Hash.pm +++ b/Hash.pm @@ -71,9 +71,15 @@ sub pass($$@) { my($self,$funcname,@funcargs)=@_; - 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 $@; } our $AUTOLOAD;