123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339 |
- Text::Template v1.46
- This is a library for generating form letters, building HTML pages, or
- filling in templates generally. A `template' is a piece of text that
- has little Perl programs embedded in it here and there. When you
- `fill in' a template, you evaluate the little programs and replace
- them with their values.
- Here's an example of a template:
- Dear {$title} {$lastname},
- It has come to our attention that you are delinquent in your
- {$monthname[$last_paid_month]} payment. Please remit
- ${sprintf("%.2f", $amount)} immediately, or your patellae may
- be needlessly endangered.
- Love,
- Mark "{nickname(rand 20)}" Dominus
- The result of filling in this template is a string, which might look
- something like this:
- Dear Mr. Gates,
- It has come to our attention that you are delinquent in your
- February payment. Please remit
- $392.12 immediately, or your patellae may
- be needlessly endangered.
- Love,
- Mark "Vizopteryx" Dominus
- You can store a template in a file outside your program. People can
- modify the template without modifying the program. You can separate
- the formatting details from the main code, and put the formatting
- parts of the program into the template. That prevents code bloat and
- encourages functional separation.
- You can fill in the template in a `Safe' compartment. This means that
- if you don't trust the person who wrote the code in the template, you
- won't have to worry that they are tampering with your program when you
- execute it.
- ----------------------------------------------------------------
- Text::Template was originally released some time in late 1995 or early
- 1996. After three years of study and investigation, I rewrote it from
- scratch in January 1999. The new version, 1.0, was much faster,
- delivered better functionality and was almost 100% backward-compatible
- with the previous beta versions.
- I have added a number of useful features and conveniences since the
- 1.0 release, while still retaining backward compatibility. With one
- merely cosmetic change, the current version of Text::Template passes
- the test suite that the old beta versions passed.
- Questions or comments should be addressed to
- mjd-perl-template+@plover.com. This address goes directly to me, and
- not to anyone else; it is not a mailing list address.
- To receive occasional announcements of new versions of T::T, send an
- empty note to mjd-perl-template-request@plover.com. This mailing list
- is not for discussion; it is for announcements only. Therefore, there
- is no address for sending messages to the list.
- You can get the most recent version of Text::Template, news, comments,
- and other collateral information from
- <URL:http://www.plover.com/~mjd/perl/Template/>.
- ----------------------------------------------------------------
- What's new in v1.46 since v1.44:
- Thanks to Rik Signes, there is a new
- Text::Template->append_text_to_output method, which
- Text::Template always uses whenever it wants to emit output.
- You can subclass this to get control over the output, for
- example for postprocessing.
- A spurious warning is no longer emitted when the TYPE
- parameter to ->new is omitted.
- ----------------------------------------------------------------
- What's new in v1.44 since v1.43:
- This is a maintentance release. There are no feature changes.
- _scrubpkg, which was responsible for eptying out temporary
- packages after the module had done with them, wasn't always
- working; the result was memory-leaks in long-running
- applications. This should be fixed now, and there is a test
- in the test suite for it.
- Minor changes to the test suite to prevent spurious errors.
- Minor documentation changes.
- ----------------------------------------------------------------
- What's new in v1.43 since v1.42:
- The ->new method now fails immediately and sets
- $Text::Template::ERROR if the file that is named by a filename
- argument does not exist or cannot be opened for some other
- reason. Formerly, the constructor would succeed and the
- ->fill_in call would fail.
- ----------------------------------------------------------------
- What's new in v1.42 since v1.41:
- This is a maintentance release. There are no feature changes.
- Fixed a bug relating to use of UNTAINT under perl 5.005_03 and
- possibly other versions.
- Taint-related tests are now more comprehensive.
- ----------------------------------------------------------------
- What's new in v1.41 since v1.40:
- This is a maintentance release. There are no feature changes.
- Tests now work correctly on Windows systems and possibly on
- other non-unix systems.
- ----------------------------------------------------------------
- What's new in v1.40 since v1.31:
- New UNTAINT option tells the module that it is safe to 'eval'
- code even though it has come from a file or filehandle.
- Code added to prevent memory leaks when filling many
- templates. Thanks to Itamar Almeida de Carvalho.
- Bug fix: $OUT was not correctly initialized when used in
- conjunction with SAFE.
- You may now use a glob ref when passing a filehandle to the
- ->new funcion. Formerly, a glob was reuqired.
- New subclass: Text::Template::Preprocess. Just like
- Text::Template, but you may supply a PREPROCESS option in the
- constructor or the fill_in call; this is a function which
- receives each code fragment prior to evaluation, and which may
- modify and return the fragment; the modified fragment is what
- is evaluated.
- Error messages passed to BROKEN subroutines will now report
- the correct line number of the template at which the error
- occurred:
- Illegal division by zero at template line 37.
- If the template comes from a file, the filename will be
- reported as well:
- Illegal division by zero at catalog.tmpl line 37.
- INCOMPATIBLE CHANGE:
- The format of the default error message has changed. It used
- to look like:
- Program fragment at line 30 delivered error ``Illegal division by zero''
- It now looks like:
- Program fragment delivered error ``Illegal division by zero at catalog.tmpl line 37''
- Note that the default message used to report the line number
- at which the program fragment began; it now reports the line
- number at which the error actually occurred.
- ----------------------------------------------------------------
- What's new in v1.31 since v1.23:
- Just bug fixes---fill_in_string was failing. Thanks to
- Donald L. Greer Jr. for the test case.
- ----------------------------------------------------------------
- What's new in v1.23 since v1.22:
- Small bug fix: DELIMITER and other arguments were being
- ignored in calls to fill_in_file and fill_this_in. (Thanks to
- Jonathan Roy for reporting this.)
- ----------------------------------------------------------------
- What's new in v1.22 since v1.20:
- You can now specify that certain Perl statements be prepended
- to the beginning of every program fragment in a template,
- either per template, or for all templates, or for the duration
- of only one call to fill_in. This is useful, for example, if
- you want to enable `strict' checks in your templates but you
- don't want to manually add `use strict' to the front of every
- program fragment everywhere.
- ----------------------------------------------------------------
- What's new in v1.20 since v1.12:
- You can now specify that the program fragment delimiters are
- strings other than { and }. This has three interesting
- effects: First, it changes the delimiter strings. Second, it
- disables the special meaning of \, so you have to be really,
- really sure that the delimiters will not appear in your
- templates. And third, because of the simplifications
- introduced by the elimination of \ processing, template
- parsing is 20-25% faster.
- See the manual section on `Alternative Delimiters'.
- Fixed bug having to do with undefined values in HASH options.
- In particular, Text::Template no longer generates a warning if
- you try to give a variable an undefined value.
- ----------------------------------------------------------------
- What's new in v1.12 since v1.11:
- I forgot to say that Text::Template ISA Exporter, so the
- exported functions never got exported. Duhhh!
- Template TYPEs are now case-insensitive. The `new' method now
- diagnoses attempts to use an invalid TYPE.
- More tests for these things.
- ----------------------------------------------------------------
- What's new in v1.11 since v1.10:
- Fixed a bug in the way backslashes were processed. The 1.10
- behavior was incompatible with the beta versions and was also
- inconvenient. (`\n' in templates was replaced with `n' before
- it was given to Perl for evaluation.) The new behavior is
- also incompatible with the beta versions, but it is only a
- little bit incompatible, and it is probbaly better.
- Documentation for the new behavior, and tests for the bug.
- ----------------------------------------------------------------
- What's new in v1.10 since v1.03:
- New OUTPUT option delivers template results directly to a
- filehandle instead of making them into a string. Saves space
- and time.
- PACKAGE and HASH now work intelligently with SAFE.
- Fragments may now output data directly to the template, rather
- than having to arrange to return it as a return value at the
- end. This means that where you used to have to write this:
- { my $blist = '';
- foreach $i (@items) {
- $blist .= qq{ * $i\n};
- }
- $blist;
- }
- You can now write this instead, because $OUT is special.
- { foreach $i (@items) {
- $OUT.= " * $i\n";
- }
- }
- (`A spoonful of sugar makes the medicine go down.')
- Fixed some small bugs. Worked around a bug in Perl that does
- the wrong thing with $x = <Y> when $x contains a glob.
- More documentation. Errors fixed.
- Lots more tests.
- ----------------------------------------------------------------
- What's new in v1.03 since v1.0:
- Code added to support HASH option to fill_in.
- (Incl. `_gensym' function.)
-
- Documentation for HASH.
-
- New test file for HASH.
-
- Note about failure of lexical variables to propagate into
- templates. Why does this surprise people?
-
- Bug fix: program fragments are evaluated in an environment with
- `no strict' by default. Otherwise, you get a lot of `Global
- symbol "$v" requires explicit package name' failures. Why didn't
- the test program pick this up? Because the only variable the test
- program ever used was `$a', which is exempt. Duhhhhh.
-
- Fixed the test program.
-
- Various minor documentation fixes.
- ----------------------------------------------------------------
- Improvements of 1.0 over the old 0.1beta:
- New features:
- At least twice as fast
- Better support for filling out the same template more than once
- Now supports evaluation of program fragments in Safe
- compartments. (Thanks, Jonathan!)
- Better argument syntax
- More convenience functions
- The parser is much better and simpler.
- Once a template is parsed, the parsed version is stored so that
- it needn't be parsed again.
- BROKEN function behavior is rationalized. You can now pass an
- arbitrary argument to your BROKEN function, or return a value
- from it to the main program.
- Documentation overhauled.
|