HTML::Template . . . A popular, robust, powerful mini-language templating system which also does just fine on normal text files.
IMHO, it's not suitable for normal text files because of the way it handles whitespace:
$ perl -MHTML::Template -e '$in = join "", <>; $tmpl = HTML::Template-
+>new( scalarref => \$in ); print $tmpl->output;'
Which will output:
The extra lines just aren't acceptable for plaintext. It's fine for HTML since whitespace is almost always ignored there.
"There is no shame in being self-taught, only in not trying to learn in the first place." -- Atrus, Myst: The Book of D'ni.