Looks like a good case for playing with the input record separator variable ($/). Set that to "---\n", and every time you read with
<> from that file, you'll get a multi-line string, containing the "Main" and all "Sub" blocks.
Then, on each whole record, you can look for the pieces you want via regex matches -- e.g.:
my @name = ( /Name:\s+(.*)/ );
my @find = ( /Find:\s+(.*)/g );
my @text = ( /Text:\s+(.*)/g );
(update: added "g" modifier to get all matches)
In each case, the strings captured by the parens in the regex will be assigned in order of occurrence to the array. (Note that "." in the regex will not match "\n", so each of the "(.*)" captures will extend only to the end of the matched line.)
Then all you need to do is work out how to manage the loading of the hash; it looks like each successive record (delimited by "---") will be a successive layer in the hash. Try some things out, and if you have trouble, post what you have tried.
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: |
| & | | & |
| < | | < |
| > | | > |
| [ | | [ |
| ] | | ] |
Link using PerlMonks shortcuts! What shortcuts can I use for linking?
See Writeup Formatting Tips and other pages linked from there for more info.