{ 'number_of_subs' => 5, 'report_map' => 'test5', 'number_of_mains' => 2, 'ystem_start_time' => '1564574677317', 'system_id' => '453521412412', 'timestamp' => 1564574676, 'user' => 'asdasvb' 'mains' => [ { 'main_path' => 'play_ground/MAIN', 'subs' => [ { 'info' => [ { 'version' => [ 'tcsh' ], 'group' => 'pkgs' }, { 'version' => [ '6.13.00' ], 'group' => 'tcsh' } ], 'sub_path' => 'GROUP1/Test1', 'sub_name' => 'Test1' }, { 'data' => [ { 'version' => [ 'tcsh' ], 'group' => 'pkgs' }, { 'version' => [ '6.13.00' ], 'group' => 'tcsh' } ], 'sub_path' => 'GROUP2', 'sub_name' => 'GROUP2' }, { 'info' => [ { 'version' => [ '3.14' ], 'group' => 'A' }, { 'version' => [ '2.56' ], 'group' => 'B' }, { 'version' => [ '6.13.00', '6.14.00' ], 'group' => 'C' } ], 'sub_path' => 'Test1', 'sub_name' => 'Test1' } ], 'main_name' => 'MAIN' }, { 'main_path' => 'play_ground/MAIN1', 'subs' => [ { 'info' => [ { 'version' => [ 'tcsh' ], 'group' => 'pkgs' }, { 'version' => [ '6.13.00' ], 'group' => 'tcsh' } ], 'sub_path' => 'TEST2/SUB1', 'sub_group' => 'SUB1' }, { 'info' => [ { 'version' => [ 'tcsh' ], 'group' => 'pkgs' }, { 'version' => [ '6.13.00' ], 'group' => 'tcsh' } ], 'sub_path' => 'TEST2/SUB2', 'sub_name' => 'SUB2' } ], 'main_name' => 'MAIN1' } ], } #### main1: subs1: sub_name: sub1 sub_path: path/to/sub1 info: { group = "ABC", version ="4.2.1" } main_name: ROOT main_path: /PATH/TO/ROOT #### main1: subs1: sub_name: sub2 sub_path: path/to/sub2 info: { group = "ABC", version = "1.5.6","4.2.1" } main_name: ROOT main_path: /PATH/TO/ROOT #### main1: subs1: sub_name: sub1 sub_path: path/to/sub1 info: { group = "ABC", version = "1.5.6","4.2.1" } main_name: ROOT main_path: /PATH/TO/ROOT #### main1: subs1: sub_name: sub1 sub_path: path/to/sub1 info: { group = "XYZ", version = "1.5.6","4.2.1" } main_name: ROOT main_path: /PATH/TO/ROOT #### main1: subs1: sub_name: sub1 sub_path: path/to/sub1 info: { group = "XYZ", version = "1.5.6","4.2.1" } main_name: ROOT_OTHER main_path: /PATH/TO/ROOT #### main1: subs1: sub_name: sub1 sub_path: path/to/sub1 info: { group = "ABC", version = "4.2.1" } subs2: sub_name: sub2 sub_path: path/to/sub2 info: { group = "ABC", version = "1.5.6","4.2.1" } main_name: ROOT main_path: /PATH/TO/ROOT #### main1: subs1: sub_name: sub1 sub_path: path/to/sub1 info: { group = "ABC", version ="4.2.1" } main_name: ROOT main_path: /PATH/TO/ROOT #### main1: subs1: sub_name: sub1 sub_path: path/to/sub1 info: { group = "XYZ", version = "1.5.6","4.2.1" },{ group = "ABC", version ="4.2.1" } main_name: ROOT main_path: /PATH/TO/ROOT #### main1: subs1: sub_name: sub1 sub_path: path/to/sub1 info: { group = "ABC", version ="4.2.1" } main_name: ROOT main_path: /PATH/TO/ROOT main2: subs1: sub_name: sub1 sub_path: path/to/sub1 info: { group = "XYZ", version = "1.5.6","4.2.1" } main_name: ROOT_OTHER main_path: /PATH/TO/ROOT #### my %output_reports; foreach my $main (@{$data->{"mains"}}) { my $uniq_main = 1; foreach my $new_main (@{$output_reports{"mains"}}) { if ($main->{"main_path"} eq $new_main->{"main_path"} && $main->{"main_name"} eq $new_main->{"main_name"}) { $uniq_main = 0; my $uniq_sub = 1; foreach my $sub (@{$main->{"subs"}}) { foreach my $new_sub (@{$new_main->{"subs"}) { if ($sub->{"sub_path"} eq $new_sub->{"sub_path"} && $sub->{"sub_name"} eq $new_sub->{"sub_name"}) { # Stuck here - I need the timestamp } } } } } if ($uniq_main) { push(@{$output_reports{"mains"}},$main); } }