Beefy Boxes and Bandwidth Generously Provided by pair Networks
Keep It Simple, Stupid
 
PerlMonks  

Re: An Elegance Question

by turnstep (Parson)
on Apr 13, 2000 at 22:40 UTC ( [id://7508]=note: print w/replies, xml ) Need Help??


in reply to An Elegance Question

How about this:

%madname = ( ## Uppercase easy to see in the story file "NOUN" => "a noun", "VERB" => "a verb", "ADJ" => "an adjective"); $storyfile = shift or die "I need a filename!\n"; open(STORY, "$storyfile") || die "Could not open $storyfile: $!\n"; while (<STORY>) { push(@lines, $_); ## Count total inserted words while (m/\[(NOUN|VERB|ADJ)\]/g) { $madlib{$1}++; } } close(STORY); for $x (sort keys %madlib) { for $y (1..$madlib{$x}) { print "Please give me $madname{$x}: "; chomp($answer{$x.$y} = <STDIN>); } $madlib{$x}=1; ## reset this } ## Tricky part... for (@lines) { s/\[(NOUN|VERB|ADJ)\]/$answer{$1.$madlib{$1}++}/ge; print; } exit;

As a bonus, you can have more than one "madlib" on a line, like this:

She dropped the [ADJ] [NOUN] and ran into the [ADJ] house.

You also don't have to worry about numbering them, or keeping a total count - the program does that for you.

Replies are listed 'Best First'.
RE: Re: An Elegance Question
by Simplicus (Monk) on Apr 13, 2000 at 22:53 UTC
    Wow! A plethora of elegant epistles! Thanks! S-

Log In?
Username:
Password:

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

How do I use this?Last hourOther CB clients
Other Users?
Others exploiting the Monastery: (3)
As of 2024-04-19 20:04 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found