From: short <> Date: Sun, 18 Sep 2005 19:04:14 +0000 (+0000) Subject: Cleaned up + fixed handing of missing 'DESTROY's/'UNTIE's. X-Git-Url: http://git.jankratochvil.net/?p=MyWeb.git;a=commitdiff_plain;h=a4810954a0bfff7b3d35c4d45b12f740b0ed661e Cleaned up + fixed handing of missing 'DESTROY's/'UNTIE's. --- 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;