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:
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.$/ = ""; 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; }
$ 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 dayIn reply to Re: Reading structured records from a file
by dmmiller2k
in thread Reading structured records from a file
by LukeyBoy
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |