In order to reduce the 'noise factor' of your array definitions, you could also construct each as follows:
my ( @l1,
@l1 = qw(Date IndexID Maturity OnTheRun CompositePrice
CompositeSpread ModelPrice ModelSpread Depth Heat);
@l2 = qw(OnTheRun CompositePrice CompositeSpread Depth);
# More code here...
By declaring your variables, arrays, hashes, etc. at an earlier stage in the program, it reduces, in my experience, a portion of the frustration inherently present in the debugging process.
Hope this helps,