#!/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 ], }; my %merged = map { $_ => [@{$ranges->{$_}}[0..2], @{$ranges->{$ranges->{$_}[3]}}[0..2]] } grep { defined $ranges->{$_}->[3] } keys %$ranges; print "EDITED RANGES:\n"; print Dumper \%merged;