Author: spadkins
Date: Tue Jun 26 08:30:18 2007
New Revision: 9683

Modified:
   p5ee/trunk/App-Context/lib/App/Reference.pm

Log:
cleaned up the overlay() method

Modified: p5ee/trunk/App-Context/lib/App/Reference.pm
==============================================================================
--- p5ee/trunk/App-Context/lib/App/Reference.pm (original)
+++ p5ee/trunk/App-Context/lib/App/Reference.pm Tue Jun 26 08:30:18 2007
@@ -327,28 +327,21 @@
 
 sub overlay {
     &App::sub_entry if ($App::trace);
-    my $self = shift;
-    my ($ref1, $ref2, $key);
-    return if ($#_ < 0 || $#_ > 1);
-    if ($#_ == 0) {
+    my ($self, $ref1, $ref2) = @_;
+    if (!defined $ref2) {
+        $ref2 = $ref1;
         $ref1 = $self;
-        $ref2 = $_[0];
-    }
-    else {
-        $ref1 = $_[0];
-        $ref2 = $_[1];
     }
     my $ref1type = ref($ref1);
     my $ref2type = ref($ref2);
-    if ($ref1type eq "ARRAY" && $ref1type eq $ref2type) {
-        # array: nothing to do
-    }
-    elsif ($ref1type eq "" && $ref1type eq $ref2type) {
+    if ($ref1type eq "" || $ref2type eq "") {
         # scalar: nothing to do
     }
-    else {
-        # hash
-        foreach $key (keys %$ref2) {
+    elsif ($ref1type eq "ARRAY" || $ref2type eq "ARRAY") {
+        # array: nothing to do
+    }
+    else {  # assume they are both hashes
+        foreach my $key (keys %$ref2) {
             if (!exists $ref1->{$key}) {
                 $ref1->{$key} = $ref2->{$key};
             }
@@ -356,7 +349,7 @@
                 $ref1type = ref($ref1->{$key});
                 if ($ref1type && $ref1type ne "ARRAY") {
                     $ref2type = ref($ref2->{$key});
-                    if ($ref1type eq $ref2type) {
+                    if ($ref2type && $ref2type ne "ARRAY") {
                         $self->overlay($ref1->{$key}, $ref2->{$key});
                     }
                 }

Reply via email to