Masem has a very straightforward suggestion, but here is another.

If your records are somehow grouped, say, with an extra newline after the last line of one record and before the first line of the next, you can set the input record separator, $/ = "\n\n", to read each group at once. Then, for each one, split it on newline and assign each to separate hash keys, to wit:

$/ = ""; my @keys = qw(dir name desc date box num1 num2 num3 num4 ); my @recs; while (<>) { # read a group of lines my %rec; # split the line at newlines and assign to a hash slice @rec{@keys} = split /\n/; push @recs, \%rec; }
If you don't have the extra newlines, you can insert them first with a simple one-liner that inserts a newline before any slash that begins a line.

$ perl -pie 's:^/:\n/:' file

Update: Corrected $ to @ in @rec{@keys} and added missing trailing : delimiter in one-liner. Also, changed $/ to "", as suggested in this node.

dmm

If you GIVE a man a fish you feed him for a day
But,
TEACH him to fish and you feed him for a lifetime

In reply to Re: Reading structured records from a file by dmmiller2k
in thread Reading structured records from a file by LukeyBoy

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.