use warnings; use strict; use Data::Dump; my %HoH; while ( my $line = ){ my %fields; my ( $slot, @values ) = unpack( 'A3A17A16A19', $line ); @fields{'Description','HW Version','Software Version'} = @values; $HoH{$slot}= \%fields; } dd \%HoH; __DATA__ 8 CAM (0D, 12U) CAM-01122W/K05 CMTS_V07.03.01.39 112 days 2:26:10 9 CAM (0D, 12U) CAM-01122W/K05 CMTS_V07.03.01.39 112 days 2:26:10 10 CAM (16D, 0U) CAM-20016W/G04 CMTS_V07.03.01.39 112 days 2:29:46 11 CAM (16D, 0U) CAM-20016W/G04 CMTS_V07.03.01.39 112 days 2:30:15 #### { " 8" => { Description => "CAM (0D, 12U)", "HW Version" => "CAM-01122W/K05", "Software Version" => "CMTS_V07.03.01.39", }, " 9" => { Description => "CAM (0D, 12U)", "HW Version" => "CAM-01122W/K05", "Software Version" => "CMTS_V07.03.01.39", }, 10 => { Description => "CAM (16D, 0U)", "HW Version" => "CAM-20016W/G04", "Software Version" => "CMTS_V07.03.01.39", }, 11 => { Description => "CAM (16D, 0U)", "HW Version" => "CAM-20016W/G04", "Software Version" => "CMTS_V07.03.01.39", }, }