Beefy Boxes and Bandwidth Generously Provided by pair Networks
"be consistent"
 
PerlMonks  

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.


Comment on Re: An Elegance Question
Select or Download Code
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
Node Status?
node history
Node Type: note [id://7508]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others examining the Monastery: (9)
As of 2015-07-08 03:20 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...









    Results (93 votes), past polls