use warnings; use strict; my %input; my $total; my $grand_total; while () { chomp; next if /^$/; my ( $k1, $k2, $k3, $k4, $k5 ) = unpack("x25 A10 A10 x1 A10 x1 A1 x1 A5"); $total += $k4; $grand_total += $k5; push @{ $input{'summary'}{'Detial_Summary'}{$k1}{$k2}{$k3}{ ++$k4 } }, $k5; } push @{ $input{'summary'}{'TOTAL'}{$total} }, $grand_total; use Data::Dump; dd \%input; __DATA__ Summary Detial_Summary EMC CHECK abcdefghi AZ_checker 1 20.32 Summary Detial_Summary EMC CHECK abcdefghi AZ_checker 1 24.00 Summary Detial_Summary EMC CHECK KBCDEFGHI AZ_checker 1 10.00 Summary Detial_Summary EMC CHECK KBCDEFGHI AZ_checker 1 14.00 Summary1 Detial_Summary1 EMC CHECK1 abcdefghi AZ_checker 1 20.59 Summary1 Detial_Summary1 EMC CHECK1 abcdefghi AZ_checker 1 24.00 Summary1 Detial_Summary1 EMC CHECK1 HGIJHKKIF AZ_checker 1 10.00 Summary1 Detial_Summary1 EMC CHECK1 HGIJHKKIF AZ_checker 1 14.00 #### { summary => { Detial_Summary => { "EMC CHECK" => { " abcdefghi" => { AZ_checker => { 2 => [20.32, "24.00"] } }, " KBCDEFGHI" => { AZ_checker => { 2 => ["10.00", "14.00"] } }, }, "EMC CHECK1" => { " abcdefghi" => { AZ_checker => { 2 => [20.59, "24.00"] } }, " HGIJHKKIF" => { AZ_checker => { 2 => ["10.00", "14.00"] } }, }, }, TOTAL => { 8 => [136.91] }, }, }