in reply to search and variable interpolation in templates

Standard practice is to put your key/values into a hash and loop through your text once.

my %hash = ( vars => 'vars', this => 'this', doink => 'doink', dink => 'dink', ); while(<DATA>) { s/\[([^]]+)\]/$hash{$1}/g; print; } __END__ <h1>Some beginning HTML up here</h1> <update> interpolate [vars] when they are<p> between brackets like [this]. <p> <a href="[doink]">[dink]</a> </update> <small>The ending HTML down here</small>

If you want, you can use HTML::Parser or something so it only looks at whatever's between the <update> tags (or, if as gryphon surmised, you want to run through <update> many times.)