sub merge { my @a; my @b; { my $a_ref = shift; my $b_ref = shift; @a = @{$a_ref}; @b = @{$b_ref}; } my %hash; my @c; for(my $x = 0; $x <= $#b; $x++) { $hash{$b[$x][1]} = \@{$b[$x]};} for(my $x = 0; $x <= $#a; $x++) { if((exists $hash{$a[$x][1]}) && (defined $hash{$a[$x][1]})) { for(my $y = 2; $y <= $#{$hash{$a[$x][1]}}; $y++) { $hash{$a[$x][1]}[$y] = ($hash{$a[$x][1]}[$y] + $a[$x][$y]) / 2; } } else { $hash{$a[$x][1]} = \@{$a[$x]}; } } foreach (sort { $a <=> $b } keys %hash) { push @c, \@{$hash{$_}}; } return @c; }