use strict; use warnings; my %MasterHash; my $line = "k1:v1 k2:v2 k3:v3"; #the space is a tab ##some part of code that writes stuff to MasterHash .... my @array1 = split (/\t/,$line); my ( $index )= grep { $array1[$_] =~ /v3/ } 0..$#array1; my $mv = splice @array1, $index,1; print "after removing: $mv\n"; my ($mvl,$mvr) = split (/:/,$mv,2); $MasterHash{$mvr} = map { split /:/; } @array1; print Dumper \%MasterHash; #### $Var1 = { 'abc' => 'loaded before', 'xyz' => 'loaded before', 'v3' => 16 #basically some number }; #### $Var1 = { 'abc' => 'loaded before', 'xyz' => 'loaded before', 'v3' => { 'k1' => 'v1', 'k2' => 'v2' } };