use constant EX_TEMPLATE => 'II'; my $length = 8; my %ValArrayByID = (); # ... open file handle $fh, etc... my $packed_data; while (read($fh, $packed_data, $length)) { my ($ID, $Val) = unpack EX_TEMPLATE, $packed_data; not defined $ValArrayByID{$ID} and $ValArrayByID{$ID} = []; push @{$ValArrayByID{$ID}}, $Val; } # ... close file and use my newly minted hash