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

Re: An Elegance Question

by turnstep (Parson)
on Apr 13, 2000 at 22:40 UTC ( #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?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://7508]
and all is quiet...

How do I use this? | Other CB clients
Other Users?
Others pondering the Monastery: (6)
As of 2017-03-25 19:00 GMT
Find Nodes?
    Voting Booth?
    Should Pluto Get Its Planethood Back?

    Results (313 votes). Check out past polls.