#!/usr/bin/perl use strict; use warnings; use Data::Dumper; my $ranges = { 1282 => [ 25, 40, 5, undef ], 1283 => [ 300, 400, 25, 1282 ], 1284 => [ 20, 30, 5, undef ], 1285 => [ 250, 260, 10, 1284 ], 1286 => [ 25, 30, 5, undef ], 1287 => [ "0.003", "0.005", "0.001", 1286 ], }; for my $range (keys %$ranges) { my $related_r = @{ $ranges->{$range} }[3]; if ( defined $related_r ) { my @merge_range; @merge_range = ( @{$ranges->{$range}}[0..2], @{$ranges->{$related_r}}[0..2] ); delete $ranges->{$related_r}; $ranges->{$range} = \@merge_range; } } print "EDITED RANGES:\n"; print Dumper $ranges;