Avoid 404 errors in the logs for "favicon.ico" all the time.
[MyWeb.git] / Hash.pm
diff --git a/Hash.pm b/Hash.pm
index 280c26b..614c5d7 100644 (file)
--- a/Hash.pm
+++ b/Hash.pm
@@ -38,7 +38,7 @@ sub new($$;@)
 {
 my($class,$parent,@classes)=@_;
 
-       @classes=[$class,@classes] if $class ne __PACKAGE__;
+       @classes=[$class,@classes] if $class ne __PACKAGE__ || !@classes;
        for my $item (reverse @classes) {
                my $pkg=(!ref($item) ? $item : $item->[0]);
                my @args=@{$item}[1..$#$item] if ref $item;
@@ -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;