if ($key == 48) { my %msg48; while(){ chomp; ($key48, $val48) = split /=>/; $msg48{$key48} = $val48; } $msg{$key}=\%msg48; } else{ $msg{$key} = $val; } #### #Change: $msg{$key}=\%msg48; #to $val=\%msg48; #And lose the else around: $msg{$key} = $val; #### use Data:Dumper; #### print Dumper(\%msg); #### if ($key == 48) { my %msg; $_=; chomp; ($key48, $val48) = split /=>/; $msg48{$key48} = $val48; $val=\%msg48; }