Add built local::lib
[catagits/Gitalist.git] / local-lib5 / lib / perl5 / i486-linux-gnu-thread-multi / Template / Manual / Variables.pod
CommitLineData
3fea05b9 1#============================================================= -*-perl-*-
2#
3# Template::Manual::Variables
4#
5# AUTHOR
6# Andy Wardley <abw@wardley.org>
7#
8# COPYRIGHT
9# Copyright (C) 1996-2007 Andy Wardley. All Rights Reserved.
10#
11# This module is free software; you can redistribute it and/or
12# modify it under the same terms as Perl itself.
13#
14#========================================================================
15
16=head1 NAME
17
18Template::Manual::Variables - Template variables and code bindings
19
20=head1 Template Variables
21
22A reference to a hash array may be passed as the second argument to the
23L<process()|Template#process()> method, containing definitions of template
24variables. The C<VARIABLES> (a.k.a. C<PRE_DEFINE>) option can also be used to
25pre-define variables for all templates processed by the object.
26
27 my $tt = Template->new({
28 VARIABLES => {
29 version => 3.14,
30 release => 'Sahara',
31 },
32 });
33
34 my $vars = {
35 serial_no => 271828,
36 };
37
38 $tt->process('myfile', $vars);
39
40F<myfile> template:
41
42 This is version [% version %] ([% release %]).
43 Serial number: [% serial_no %]
44
45Generated Output:
46
47 This is version 3.14 (Sahara)
48 Serial number: 271828
49
50Variable names may contain any alphanumeric characters or underscores. They
51may be lower, upper or mixed case although the usual convention is to use
52lower case. The case I<is> significant however, and 'C<foo>', 'C<Foo>' and
53'C<FOO>' are all different variables. Upper case variable names are permitted,
54but not recommended due to a possible conflict with an existing or future
55reserved word. As of version 2.00, these are:
56
57 GET CALL SET DEFAULT INSERT INCLUDE PROCESS WRAPPER
58 IF UNLESS ELSE ELSIF FOR FOREACH WHILE SWITCH CASE
59 USE PLUGIN FILTER MACRO PERL RAWPERL BLOCK META
60 TRY THROW CATCH FINAL NEXT LAST BREAK RETURN STOP
61 CLEAR TO STEP AND OR NOT MOD DIV END
62
63The variable values may be of virtually any Perl type, including
64simple scalars, references to lists, hash arrays, subroutines or
65objects. The Template Toolkit will automatically apply the correct
66procedure to accessing these values as they are used in the template.
67
68Example data:
69
70 my $vars = {
71 article => 'The Third Shoe',
72 person => {
73 id => 314,
74 name => 'Mr. Blue',
75 email => 'blue@nowhere.org',
76 },
77 primes => [ 2, 3, 5, 7, 11, 13 ],
78 wizard => sub { return join(' ', 'Abracadabra!', @_) },
79 cgi => CGI->new('mode=submit&debug=1'),
80 };
81
82Example template:
83
84 [% article %]
85
86 [% person.id %]: [% person.name %] <[% person.email %]>
87
88 [% primes.first %] - [% primes.last %], including [% primes.3 %]
89 [% primes.size %] prime numbers: [% primes.join(', ') %]
90
91 [% wizard %]
92 [% wizard('Hocus Pocus!') %]
93
94 [% cgi.param('mode') %]
95
96Generated output:
97
98 The Third Shoe
99
100 314: Mr. Blue <blue@nowhere.org>
101
102 2 - 13, including 7
103 6 prime numbers: 2, 3, 5, 7, 11, 13
104
105 Abracadabra!
106 Abracadabra! Hocus Pocus!
107
108 submit
109
110=head2 Scalar Values
111
112Regular scalar variables are accessed by simply specifying their name.
113As these are just entries in the top-level variable hash they can be
114considered special cases of hash array referencing as described below,
115with the main namespace hash automatically implied.
116
117 [% article %]
118
119=head2 Hash Array References
120
121Members of hash arrays are accessed by specifying the hash reference
122and key separated by the dot 'C<.>' operator.
123
124Example data:
125
126 my $vars = {
127 'home' => 'http://www.myserver.com/homepage.html',
128 'page' => {
129 'this' => 'mypage.html',
130 'next' => 'nextpage.html',
131 'prev' => 'prevpage.html',
132 },
133 };
134
135Example template:
136
137 <a href="[% home %]">Home</a>
138 <a href="[% page.prev %]">Previous Page</a>
139 <a href="[% page.next %]">Next Page</a>
140
141Generated output:
142
143 <a href="http://www.myserver.com/homepage.html">Home</a>
144 <a href="prevpage.html">Previous Page</a>
145 <a href="nextpage.html">Next Page</a>
146
147Any key in a hash which starts with a 'C<_>' or 'C<.>' character will be
148considered private and cannot be evaluated or updated from within a
149template. The undefined value will be returned for any such variable
150accessed which the Template Toolkit will silently ignore (unless the
151C<DEBUG> option is enabled).
152
153Example data:
154
155 my $vars = {
156 message => 'Hello World!',
157 _secret => "On the Internet, no-one knows you're a dog",
158 thing => {
159 public => 123,
160 _private => 456,
161 '.hidden' => 789,
162 },
163 };
164
165Example template:
166
167 [% message %] # outputs "Hello World!"
168 [% _secret %] # no output
169 [% thing.public %] # outputs "123"
170 [% thing._private %] # no output
171 [% thing..hidden %] # ERROR: unexpected token (..)
172
173You can disable this feature by setting the C<$Template::Stash::PRIVATE>
174package variable to a false value.
175
176 $Template::Stash::PRIVATE = undef; # now you can thing._private
177
178To access a hash entry using a key stored in another variable, prefix
179the key variable with 'C<$>' to have it interpolated before use (see
180L<Variable Interpolation>).
181
182 [% pagename = 'next' %]
183 [% page.$pagename %] # same as [% page.next %]
184
185When you assign to a variable that contains multiple namespace
186elements (i.e. it has one or more 'C<.>' characters in the name),
187any hashes required to represent intermediate namespaces will be
188created automatically. In this following example, the C<product>
189variable automatically springs into life as a hash array unless
190otherwise defined.
191
192 [% product.id = 'XYZ-2000'
193 product.desc = 'Bogon Generator'
194 product.price = 666
195 %]
196
197 The [% product.id %] [% product.desc %]
198 costs $[% product.price %].00
199
200Generated output:
201
202 The XYZ-2000 Bogon Generator
203 costs $666.00
204
205You can use Perl's familiar C<{> ... C<}> construct to explicitly create
206a hash and assign it to a variable. Note that commas are optional
207between key/value pairs and C<=> can be used in place of C<=E<gt>>.
208
209 # minimal TT style
210 [% product = {
211 id = 'XYZ-2000'
212 desc = 'Bogon Generator'
213 price = 666
214 }
215 %]
216
217 # perl style
218 [% product = {
219 id => 'XYZ-2000',
220 desc => 'Bogon Generator',
221 price => 666,
222 }
223 %]
224
225=head2 List References
226
227Items in lists are also accessed by use of the dot operator.
228
229Example data:
230
231 my $vars = {
232 people => [ 'Tom', 'Dick', 'Larry' ],
233 };
234
235Example template:
236
237 [% people.0 %] # Tom
238 [% people.1 %] # Dick
239 [% people.2 %] # Larry
240
241The C<FOREACH> directive can be used to iterate through items in a list.
242
243 [% FOREACH person IN people %]
244 Hello [% person %]
245 [% END %]
246
247Generated output:
248
249 Hello Tom
250 Hello Dick
251 Hello Larry
252
253Lists can be constructed in-situ using the regular anonymous list
254C<[> ... C<]> construct. Commas between items are optional.
255
256 [% cols = [ 'red', 'green', 'blue' ] %]
257
258 [% FOREACH c IN cols %]
259 [% c %]
260 [% END %]
261
262or:
263
264 [% FOREACH c IN [ 'red', 'green', 'blue' ] %]
265 [% c %]
266 [% END %]
267
268You can also create simple numerical sequences using the C<..> range
269operator:
270
271 [% n = [ 1 .. 4 ] %] # n is [ 1, 2, 3, 4 ]
272
273 [% x = 4
274 y = 8
275 z = [x..y] # z is [ 4, 5, 6, 7, 8 ]
276 %]
277
278=head2 Subroutines
279
280Template variables can contain references to Perl subroutines. When
281the variable is used, the Template Toolkit will automatically call the
282subroutine, passing any additional arguments specified. The return
283value from the subroutine is used as the variable value and inserted
284into the document output.
285
286 my $vars = {
287 wizard => sub { return join(' ', 'Abracadabra!', @_) },
288 };
289
290Example template:
291
292 [% wizard %] # Abracadabra!
293 [% wizard('Hocus Pocus!') %] # Abracadabra! Hocus Pocus!
294
295=head2 Objects
296
297Template variables can also contain references to Perl objects.
298Methods are called using the dot operator to specify the method
299against the object variable. Additional arguments can be specified
300as with subroutines.
301
302 use CGI;
303
304 my $vars = {
305 # hard coded CGI params for purpose of example
306 cgi => CGI->new('mode=submit&debug=1'),
307 };
308
309Example template:
310
311 [% FOREACH p IN cgi.param %] # returns list of param keys
312 [% p %] => [% cgi.param(p) %] # fetch each param value
313 [% END %]
314
315Generated output:
316
317 mode => submit
318 debug => 1
319
320Object methods can also be called as lvalues. That is, they can appear on
321the left side of an assignment. The method will be called passing the
322assigning value as an argument.
323
324 [% myobj.method = 10 %]
325
326equivalent to:
327
328 [% myobj.method(10) %]
329
330=head2 Passing Parameters and Returning Values
331
332Subroutines and methods will be passed any arguments specified in the
333template. Any template variables in the argument list will first be
334evaluated and their resultant values passed to the code.
335
336 my $vars = {
337 mycode => sub { return 'received ' . join(', ', @_) },
338 };
339
340template:
341
342 [% foo = 10 %]
343 [% mycode(foo, 20) %] # received 10, 20
344
345Named parameters may also be specified. These are automatically collected
346into a single hash array which is passed by reference as the B<last>
347parameter to the sub-routine. Named parameters can be specified using
348either C<=E<gt>> or C<=> and can appear anywhere in the argument list.
349
350 my $vars = {
351 myjoin => \&myjoin,
352 };
353
354 sub myjoin {
355 # look for hash ref as last argument
356 my $params = ref $_[-1] eq 'HASH' ? pop : { };
357 return join($params->{ joint } || ' + ', @_);
358 }
359
360Example template:
361
362 [% myjoin(10, 20, 30) %]
363 [% myjoin(10, 20, 30, joint = ' - ' %]
364 [% myjoin(joint => ' * ', 10, 20, 30 %]
365
366Generated output:
367
368 10 + 20 + 30
369 10 - 20 - 30
370 10 * 20 * 30
371
372Parenthesised parameters may be added to any element of a variable,
373not just those that are bound to code or object methods. At present,
374parameters will be ignored if the variable isn't "callable" but are
375supported for future extensions. Think of them as "hints" to that
376variable, rather than just arguments passed to a function.
377
378 [% r = 'Romeo' %]
379 [% r(100, 99, s, t, v) %] # outputs "Romeo"
380
381User code should return a value for the variable it represents. This
382can be any of the Perl data types described above: a scalar, or
383reference to a list, hash, subroutine or object. Where code returns a
384list of multiple values the items will automatically be folded into a
385list reference which can be accessed as per normal.
386
387 my $vars = {
388 # either is OK, first is recommended
389 items1 => sub { return [ 'foo', 'bar', 'baz' ] },
390 items2 => sub { return ( 'foo', 'bar', 'baz' ) },
391 };
392
393Example template:
394
395 [% FOREACH i IN items1 %]
396 ...
397 [% END %]
398
399 [% FOREACH i IN items2 %]
400 ...
401 [% END %]
402
403=head2 Error Handling
404
405Errors can be reported from user code by calling C<die()>. Errors raised
406in this way are caught by the Template Toolkit and converted to
407structured exceptions which can be handled from within the template.
408A reference to the exception object is then available as the C<error>
409variable.
410
411 my $vars = {
412 barf => sub {
413 die "a sick error has occurred\n";
414 },
415 };
416
417Example template:
418
419 [% TRY %]
420 [% barf %] # calls sub which throws error via die()
421 [% CATCH %]
422 [% error.info %] # outputs "a sick error has occurred\n"
423 [% END %]
424
425Error messages thrown via C<die()> are converted to exceptions of type
426C<undef> (the literal string "undef" rather than the undefined value).
427Exceptions of user-defined types can be thrown by calling C<die()> with
428a reference to a L<Template::Exception> object.
429
430 use Template::Exception;
431
432 my $vars = {
433 login => sub {
434 ...do something...
435 die Template::Exception->new( badpwd => 'password too silly' );
436 },
437 };
438
439Example template:
440
441 [% TRY %]
442 [% login %]
443 [% CATCH badpwd %]
444 Bad password: [% error.info %]
445 [% CATCH %]
446 Some other '[% error.type %]' error: [% error.info %]
447 [% END %]
448
449The exception types C<stop> and C<return> are used to implement the
450C<STOP> and C<RETURN> directives. Throwing an exception as:
451
452 die (Template::Exception->new('stop'));
453
454has the same effect as the directive:
455
456 [% STOP %]
457
458=head1 Virtual Methods
459
460The Template Toolkit implements a number of "virtual methods" which
461can be applied to scalars, hashes or lists. For example:
462
463 [% mylist = [ 'foo', 'bar', 'baz' ] %]
464 [% newlist = mylist.sort %]
465
466Here C<mylist> is a regular reference to a list, and 'sort' is
467a virtual method that returns a new list of the items in sorted
468order. You can chain multiple virtual methods together. For
469example:
470
471 [% mylist.sort.join(', ') %]
472
473Here the C<join> virtual method is called to join the sorted list into
474a single string, generating the following output:
475
476 bar, baz, foo
477
478See L<Template::Manual::VMethods> for details of all the virtual
479methods available.
480
481=head1 Variable Interpolation
482
483The Template Toolkit uses C<$> consistently to indicate that a variable
484should be interpolated in position. Most frequently, you see this in
485double-quoted strings:
486
487 [% fullname = "$honorific $firstname $surname" %]
488
489Or embedded in plain text when the C<INTERPOLATE> option is set:
490
491 Dear $honorific $firstname $surname,
492
493The same rules apply within directives. If a variable is prefixed
494with a C<$> then it is replaced with its value before being used. The
495most common use is to retrieve an element from a hash where the key is
496stored in a variable.
497
498 [% uid = 'abw' %]
499 [% users.$uid %] # same as 'userlist.abw'
500
501Curly braces can be used to delimit interpolated variable names where
502necessary.
503
504 [% users.${me.id}.name %]
505
506Directives such as C<INCLUDE>, C<PROCESS>, etc., that accept a template name
507as the first argument, will automatically quote it for convenience.
508
509 [% INCLUDE foo/bar.txt %]
510
511The above example is equivalent to:
512
513 [% INCLUDE "foo/bar.txt" %]
514
515To C<INCLUDE> a template whose name is stored in a variable, simply
516prefix the variable name with C<$> to have it interpolated.
517
518 [% myfile = 'header' %]
519 [% INCLUDE $myfile %]
520
521This is equivalent to:
522
523 [% INCLUDE header %]
524
525Note also that a variable containing a reference to a L<Template::Document>
526object can also be processed in this way.
527
528 my $vars = {
529 header => Template::Document->new({ ... }),
530 };
531
532Example template:
533
534 [% INCLUDE $header %]
535
536=head1 Local and Global Variables
537
538Any simple variables that you create, or any changes you make to
539existing variables, will only persist while the template is being
540processed. The top-level variable hash is copied before processing
541begins and any changes to variables are made in this copy, leaving the
542original intact.
543
544The same thing happens when you C<INCLUDE> another template. The current
545namespace hash is cloned to prevent any variable changes made in the included
546template from interfering with existing variables. The C<PROCESS> option bypasses
547the localisation step altogether making it slightly faster, but requiring
548greater attention to the possibility of side effects caused by creating or
549changing any variables within the processed template.
550
551 [% BLOCK change_name %]
552 [% name = 'bar' %]
553 [% END %]
554
555 [% name = 'foo' %]
556 [% INCLUDE change_name %]
557 [% name %] # foo
558 [% PROCESS change_name %]
559 [% name %] # bar
560
561Dotted compound variables behave slightly differently because the
562localisation process is only skin deep. The current variable
563namespace hash is copied, but no attempt is made to perform a
564deep-copy of other structures within it (hashes, arrays, objects,
565etc). A variable referencing a hash, for example, will be copied to
566create a new reference but which points to the same hash. Thus, the
567general rule is that simple variables (undotted variables) are
568localised, but existing complex structures (dotted variables) are not.
569
570 [% BLOCK all_change %]
571 [% x = 20 %] # changes copy
572 [% y.z = 'zulu' %] # changes original
573 [% END %]
574
575 [% x = 10
576 y = { z => 'zebra' }
577 %]
578 [% INCLUDE all_change %]
579 [% x %] # still '10'
580 [% y.z %] # now 'zulu'
581
582If you create a complex structure such as a hash or list reference
583within a local template context then it will cease to exist when
584the template is finished processing.
585
586 [% BLOCK new_stuff %]
587 [% # define a new 'y' hash array in local context
588 y = { z => 'zulu' }
589 %]
590 [% END %]
591
592 [% x = 10 %]
593 [% INCLUDE new_stuff %]
594 [% x %] # outputs '10'
595 [% y %] # nothing, y is undefined
596
597Similarly, if you update an element of a compound variable which
598I<doesn't> already exists then a hash will be created automatically
599and deleted again at the end of the block.
600
601 [% BLOCK new_stuff %]
602 [% y.z = 'zulu' %]
603 [% END %]
604
605However, if the hash I<does> already exist then you will modify the
606original with permanent effect. To avoid potential confusion, it is
607recommended that you don't update elements of complex variables from
608within blocks or templates included by another.
609
610If you want to create or update truly global variables then you can
611use the 'global' namespace. This is a hash array automatically created
612in the top-level namespace which all templates, localised or otherwise
613see the same reference to. Changes made to variables within this
614hash are visible across all templates.
615
616 [% global.version = 123 %]
617
618=head1 Compile Time Constant Folding
619
620In addition to variables that get resolved each time a template is
621processed, you can also define variables that get resolved just once
622when the template is compiled. This generally results in templates
623processing faster because there is less work to be done.
624
625To define compile-time constants, specify a C<CONSTANTS> hash as a
626constructor item as per C<VARIABLES>. The C<CONSTANTS> hash can contain any
627kind of complex, nested, or dynamic data structures, just like regular
628variables.
629
630 my $tt = Template->new({
631 CONSTANTS => {
632 version => 3.14,
633 release => 'skyrocket',
634 col => {
635 back => '#ffffff',
636 fore => '#000000',
637 },
638 myobj => My::Object->new(),
639 mysub => sub { ... },
640 joint => ', ',
641 },
642 });
643
644Within a template, you access these variables using the C<constants>
645namespace prefix.
646
647 Version [% constants.version %] ([% constants.release %])
648 Background: [% constants.col.back %]
649
650When the template is compiled, these variable references are replaced
651with the corresponding value. No further variable lookup is then
652required when the template is processed.
653
654You can call subroutines, object methods, and even virtual methods on
655constant variables.
656
657 [% constants.mysub(10, 20) %]
658 [% constants.myobj(30, 40) %]
659 [% constants.col.keys.sort.join(', ') %]
660
661One important proviso is that any arguments you pass to subroutines
662or methods must also be literal values or compile time constants.
663
664For example, these are both fine:
665
666 # literal argument
667 [% constants.col.keys.sort.join(', ') %]
668
669 # constant argument
670 [% constants.col.keys.sort.join(constants.joint) %]
671
672But this next example will raise an error at parse time because
673C<joint> is a runtime variable and cannot be determined at compile
674time.
675
676 # ERROR: runtime variable argument!
677 [% constants.col.keys.sort.join(joint) %]
678
679The C<CONSTANTS_NAMESPACE> option can be used to provide a different
680namespace prefix for constant variables. For example:
681
682 my $tt = Template->new({
683 CONSTANTS => {
684 version => 3.14,
685 # ...etc...
686 },
687 CONSTANTS_NAMESPACE => 'const',
688 });
689
690Constants would then be referenced in templates as:
691
692 [% const.version %]
693
694=head1 Special Variables
695
696A number of special variables are automatically defined by the Template
697Toolkit.
698
699=head2 template
700
701The C<template> variable contains a reference to the main template being
702processed, in the form of a L<Template::Document> object. This variable is
703correctly defined within C<PRE_PROCESS>, C<PROCESS> and C<POST_PROCESS>
704templates, allowing standard headers, footers, etc., to access metadata items
705from the main template. The C<name> and C<modtime> metadata items are
706automatically provided, giving the template name and modification time in
707seconds since the epoch.
708
709Note that the C<template> variable always references the top-level
710template, even when processing other template components via C<INCLUDE>,
711C<PROCESS>, etc.
712
713=head2 component
714
715The C<component> variable is like C<template> but always contains a
716reference to the current, innermost template component being processed.
717In the main template, the C<template> and C<component> variable will
718reference the same L<Template::Document> object. In any other template
719component called from the main template, the C<template> variable
720will remain unchanged, but C<component> will contain a new reference
721to the current component.
722
723This example should demonstrate the difference:
724
725 $template->process('foo')
726 || die $template->error(), "\n";
727
728F<foo> template:
729
730 [% template.name %] # foo
731 [% component.name %] # foo
732 [% PROCESS footer %]
733
734F<footer> template:
735
736 [% template.name %] # foo
737 [% component.name %] # footer
738
739Additionally, the C<component> variable has two special fields:
740C<caller> and C<callers>. C<caller> contains the name of the template
741that called the current template (or undef if the values of C<template>
742and C<component> are the same). C<callers> contains a reference to a
743list of all the templates that have been called on the road to calling
744the current component template (like a call stack), with the
745outer-most template first.
746
747Here's an example:
748
749F<outer.tt2> template:
750
751 [% component.name %] # 'outer.tt2'
752 [% component.caller %] # undef
753 [% component.callers %] # undef
754 [% PROCESS 'middle.tt2' %]
755
756F<middle.tt2> template:
757
758 [% component.name %] # 'middle.tt2'
759 [% component.caller %] # 'outer.tt2'
760 [% component.callers %] # [ 'outer.tt2' ]
761 [% PROCESS 'inner.tt2' %]
762
763F<inner.tt2> template:
764
765 [% component.name %] # 'inner.tt2'
766 [% component.caller %] # 'middle.tt2'
767 [% component.callers %] # [ 'outer.tt2', 'middle.tt2' ]
768
769=head2 loop
770
771Within a C<FOREACH> loop, the C<loop> variable references the
772L<Template::Iterator> object responsible for controlling the loop.
773
774 [% FOREACH item = [ 'foo', 'bar', 'baz' ] -%]
775 [% "Items:\n" IF loop.first -%]
776 [% loop.count %]/[% loop.size %]: [% item %]
777 [% END %]
778
779=head2 error
780
781Within a C<CATCH> block, the C<error> variable contains a reference to the
782L<Template::Exception> object thrown from within the C<TRY> block. The
783C<type> and C<info> methods can be called or the variable itself can
784be printed for automatic stringification into a message of the form
785"C<$type error - $info>". See L<Template::Exception> for further details.
786
787 [% TRY %]
788 ...
789 [% CATCH %]
790 [% error %]
791 [% END %]
792
793=head2 content
794
795The C<WRAPPER> method captures the output from a template block and then
796includes a named template, passing the captured output as the 'content'
797variable.
798
799 [% WRAPPER box %]
800 Be not afeard; the isle is full of noises,
801 Sounds and sweet airs, that give delight and hurt not.
802 [% END %]
803
804 [% BLOCK box %]
805 <blockquote class="prose">
806 [% content %]
807 </blockquote>
808 [% END %]
809
810=head1 Compound Variables
811
812Compound 'dotted' variables may contain any number of separate
813elements. Each element may evaluate to any of the permitted variable
814types and the processor will then correctly use this value to evaluate
815the rest of the variable. Arguments may be passed to any of the
816intermediate elements.
817
818 [% myorg.people.sort('surname').first.fullname %]
819
820Intermediate variables may be used and will behave entirely as expected.
821
822 [% sorted = myorg.people.sort('surname') %]
823 [% sorted.first.fullname %]
824
825This simplified dotted notation has the benefit of hiding the
826implementation details of your data. For example, you could implement
827a data structure as a hash array one day and then change it to an
828object the next without requiring any change to the templates.
829
830=cut
831
832# Local Variables:
833# mode: perl
834# perl-indent-level: 4
835# indent-tabs-mode: nil
836# End:
837#
838# vim: expandtab shiftwidth=4: