I am not quite sure about your "rules" for parsing the input. Here is one possibility:

Update: I did the following code rather quickly. I changed my mind during the middle of coding and didn't revise the previously written code. process_record() could be shortened by calling process_sub_record() a couple of times instead of just once. This is a small detail and should be obvious how to do. The OP is still not completely clear as to whether these "Something" and "Something Else" strings are standard invariant sub-headers or whether they can vary. Also not spec'd is whether the number of lines in the record can vary or not.

Well, Ok, another update... The change to call process_sub_record() twice was so extremely trivial, that I did it and put original code in a readmore block. Perhaps it is not obvious but this implementation allows blank and comment lines at the beginning or end of the file - I have often found that feature useful in my work.

#!/usr/bin/perl use strict; use warnings; while (defined (my $x= <DATA>)) { process_record ($x) if ($x =~ /^JOB::/) } sub process_record { my $job = shift; chomp $job; print "$job\n"; process_sub_record(); process_sub_record(); } sub process_sub_record { my $sub_record = <DATA>; chomp $sub_record; for (1..4) { my $nextLine = <DATA>; chomp $nextLine; print "~~$sub_record~~ ", "$nextLine\n"; } } =PRINTS: JOB::HEREISASTRING ~~Something~~ StringA ~~Something~~ StringB ~~Something~~ StringC ~~Something~~ StringD ~~Something Else~~ StringE ~~Something Else~~ StringF ~~Something Else~~ StringG ~~Something Else~~ StringH JOB::HEREISANOTHERSTRING ~~Something~~ StringI ~~Something~~ StringJ ~~Something~~ StringK ~~Something~~ StringL ~~Something Else~~ StringM ~~Something Else~~ StringN ~~Something Else~~ StringO ~~Something Else~~ StringP =cut __DATA__ JOB::HEREISASTRING Something StringA StringB StringC StringD Something Else StringE StringF StringG StringH JOB::HEREISANOTHERSTRING Something StringI StringJ StringK StringL Something Else StringM StringN StringO StringP
#!/usr/bin/perl use strict; use warnings; while (defined (my $x= <DATA>)) { process_record ($x) if ($x =~ /^JOB::/) } sub process_record { my $job = shift; chomp $job; print "$job\n"; my $firstLine = <DATA>; chomp $firstLine; for (1..4) { my $nextLine = <DATA>; chomp $nextLine; print "~~$firstLine~~ ", "$nextLine\n"; } process_sub_record(); } sub process_sub_record { my $sub_record = <DATA>; chomp $sub_record; for (1..4) { my $nextLine = <DATA>; chomp $nextLine; print "~~$sub_record~~ ", "$nextLine\n"; } } =PRINTS: JOB::HEREISASTRING ~~Something~~ StringA ~~Something~~ StringB ~~Something~~ StringC ~~Something~~ StringD ~~Something Else~~ StringE ~~Something Else~~ StringF ~~Something Else~~ StringG ~~Something Else~~ StringH JOB::HEREISANOTHERSTRING ~~Something~~ StringI ~~Something~~ StringJ ~~Something~~ StringK ~~Something~~ StringL ~~Something Else~~ StringM ~~Something Else~~ StringN ~~Something Else~~ StringO ~~Something Else~~ StringP =cut __DATA__ JOB::HEREISASTRING Something StringA StringB StringC StringD Something Else StringE StringF StringG StringH JOB::HEREISANOTHERSTRING Something StringI StringJ StringK StringL Something Else StringM StringN StringO StringP

In reply to Re^5: Loop Array - If $var is something write values until $var is something else by Marshall
in thread Loop Array - If $var is something write values until $var is something else by maikelnight

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.