in reply to Dreaded Symbolic References

I think it would be easier for you to understand and debug what you are doing if, instead of symbolic references, you used eval, something like this:
my $assign; $assign="(".join(",",@HeaderRecordNames).")="; $assign.="unpack(\".join("",@RecordLengths[$RecordType])."\");"; print "Evaluating $assign\n"; # this is for debugging eval $assign;
While I assume (I didn't benchmark) that symbolic references would be somewhat quicker, I think this code is clearer and much easier to debug.