use Data::Diver qw/ DiveVal /; my $Record = {}; DiveVal( $Record, qw/ designation /) = "Manager"; #d0 DiveVal( $Record, qw/ name /) = "Harsha"; #d0 DiveVal( $Record, qw/ personal 0 /) = "Country"; #d1 DiveVal( $Record, qw/ personal 1 /) = "location"; #d1 DiveVal( $Record, qw/ personal 2 /) = "language"; #d1 #use Data::Dump qw/ dd /; #dd( $Record ); use JSON; print JSON->new->ascii(1)->pretty(1)->encode($Record); __END__ { "designation" : "Manager", "personal" : [ "Country", "location", "language" ], "name" : "Harsha" }