I would suggest a different data structure. You are using a hash of arrays. I would suggest an array of hashes, one for each row. Many times, a parallel set of arrays (HoA) can be better handled as an array of hashes (AoH) with map to pull the requested column.

You can assign the rows using a hash slice or a for loop. You show that you know how to use the loop, so here is a hash slice:

var %record, @records; @record{@colNames} = split(',', $line); push @records, \%record;

To extract data from this structure:

sub total_inventory { my $data = shift; List::Util::sum(map {$_->{'Inventory'}} @$data); }

The data is kept together (shuffling one column will not break the relationships with the rest of the columns).

If you use DBI with one of the CSV modules, you may even be able to use some of the function of an SQL sum() call. When (ok, if) your data moves into a database, you can then migrate with (hopefully) less effort.

--MidLifeXis


In reply to Re: CSV Columns: Friend or foe? by MidLifeXis
in thread CSV Columns: Friend or foe? by dekul

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.