Sure, use Text::Template. You'll need to slightly change the format of your madlib. Instead of something like
the [noun1] [verb2]
you need to use
the [$noun1] [$verb2]
But that's not a big change. So you may need to change the script around a bit, but it should work pretty much as is.
use Text::Template; # read in the story my @story = <>; my $hash = { }; # these are the word types that you're # going to prompt for and include in your madlib; # the key is what you call the type in the madlib ("adj") # and the value is what you want to prompt for my %types = ( noun => 'noun', verb => 'verb', adj => 'adjective' ); # read in the values from STDIN; # you may want to change this around. # 3 means read 3 words of each type (3 nouns, 3 verbs, etc.) for my $type (keys %types) { for my $i (1..3) { print "give me a $types{$type}: "; chomp($hash->{$type . $i} = <STDIN>); } } # set up a new template object: # get template from array @story where template # variables are in [] (DELIMITERS) my $t = new Text::Template(TYPE => 'ARRAY', SOURCE => [ @story ], DELIMITERS => ['[', ']']); # fill in the template with the values you read into $hash; # so in the template, [$noun1] => $hash->{'noun1'} my $story = $t->fill_in(HASH => $hash); # then just print it out print $story;

In reply to Re: An Elegance Question by btrott
in thread An Elegance Question by Simplicus

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • 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:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.