@HeaderRecordNames = qw/RequestYear RequestMonth RequestDay RequestSequence RecordType RecordSequence Record/; $HeaderRecordLengths = q/A2A2A2A4A2A2A1486/; ... my @head = unpack($HeaderRecordLengths, $_); my %Header = map {$HeaderRecordNames[$_] => $head[$_]} (0..$#head); my @data = unpack($RecordLengths[$head{RecordType}], $Header{Record}); my %Record = map {$RecordNames[$_] => $data[$_]} (0..$#data);