The Template Toolkit implements a general-purpose
presentation language rather than a
general-purpose programming language. What that
means is that for general programming tasks, building backend
applications, database access, and so on, you should continue to use
Perl and the many fine modules available for use with it.

The strength of the Template Toolkit language is in building the
frontend—that is, the HTML that presents the output of an
application or displays the content of an XML file, the results of a
database query, the collection of snapshots of your pet camel, or
whatever it is that you're trying to do. It has many
constructs that are familiar in programming languages, such as the
use of variables
(GET, SET,
DEFAULT), conditional clauses
(IF, UNLESS,
ELSIF, ELSE, etc.), loops
(FOREACH, WHILE,
SWITCH, CASE), and exception
handling (TRY,
THROW, CATCH). However, these
are generally intended to be used from the perspective of layout
logic; that is, controlling how the output looks, not what the
underlying application actually does. To compliment these basic
operations, there are also various directives more specifically
oriented to gluing chunks of content together
(PROCESS, INCLUDE,
INSERT, WRAPPER,
BLOCK), for providing useful content-manipulation
tools (FILTER, MACRO), and for
the loading of external modules (USE) by which the
toolkit can easily and quickly be extended.

Although we are focusing on HTML in particular, it is worth pointing
out that the Template Toolkit is actually language-neutral. It
operates on text files (although it can be used to generate binary
files such as images or PDF documents), and as such, it
doesn't really care what kind of text
you're generating, be it HTML, XML, LaTeX,
PostScript, or an Apache httpd.conf
configuration file.