Beefy Boxes and Bandwidth Generously Provided by pair Networks
Don't ask to ask, just ask
 
PerlMonks  

Re^3: Storing multiple blocks of text in the __DATA__ section

by graff (Chancellor)
on Jan 02, 2015 at 17:55 UTC ( [id://1112028]=note: print w/replies, xml ) Need Help??


in reply to Re^2: Storing multiple blocks of text in the __DATA__ section
in thread Storing multiple blocks of text in the __DATA__ section

Thanks(++) - I had missed that detail in the OP. As you pointed out in your update, it shouldn't be difficult to craft a record separator that's distinctive and easy to strip out. Alternately, it might not be so bad to "encode" record-internal blank lines in some distinctive and "easily decodable" manner - e.g.:
$/ = ""; while (<DATA>) { s/^(.*)\n//; $key = $1; s/\n==(?=\n)/\n/g; $structure{$key} = $_; } __DATA__ key1 Here's a text block including blank lines ("encoded" as "==" in the pe +rl script): == and here's a part of the block that's enclosed within "blank lines" == and here's the last part of the value for key1. key2 blah blah etc.
UPDATED to use the minimum necessary look-ahead, so that consecutive "blank lines" inside a record would be handled properly.

Replies are listed 'Best First'.
Re^4: Storing multiple blocks of text in the __DATA__ section
by blindluke (Hermit) on Jan 03, 2015 at 13:53 UTC

    Although, as LanX already noticed, my descriptions can contain several paragraphs, thank you for suggesting paragraph mode. Your solution is both simple and elegant.

    And the technique with encoding line breaks could indeed work. I would switch the two regexps, so there is no need to assign the capture value to $key, and I would use the \\ linebreak symbol, as it is already associated with manual linebreak (in LaTeX).

    #!/usr/bin/perl use strict; use warnings; my %desc; { local $/ = ""; while (<DATA>) { s/\\\\/\n/; s/^(.*)\n//; $desc{$1} = $_; } } print "{$_} => \n$desc{$_}" for (keys %desc); __DATA__ house_west You are standing in an open field west of a white house, with a boarded front door. \\ There is a small mailbox here. house_south You are facing the south side of a white house. There is no door here, and all the windows are boarded. house_behind You are behind the white house. A path leads into the forest to the east. \\ In one corner of the house there is a small window which is slightly a +jar.

    Again, thank you for your suggestion and the provided examples.

    - Luke

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://1112028]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others sharing their wisdom with the Monastery: (4)
As of 2024-04-24 05:00 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found