#!/usr/bin/perl use strict; use warnings; sub hash_update {     my ($x, $y) = @_;          my $tx = ref $x;     my $ty = ref $y;     my $retval;       die "Can not update due to different object type! ($tx != $ty)" unless $tx eq $ty;       if($tx eq "ARRAY")     {         $retval = [];         for my $i (0 .. _min(scalar(@{$x}), scalar(@{$y}))-1)         {             die "Array element was not expected!" unless ref $x->[$i];             push @{$retval}, hash_update($x->[$i], $y->[$i]);         }       ;      }     elsif($tx eq "HASH")     {         $retval = {};         for my $k (keys %{$x})         {             $retval->{$k} = exists $y->{$k} ? hash_update($y->{$k}, $x->{$k}) : $x;         }    }    elsif($x ne "SCALAR")    {        $retval = $x;    }    return $retval; } sub _min {     return $_[0] < $_[1] ? $_[0] : $_[1]; }