| Hash.keys
| List.join(", ") %] # = a, b
-=item Added "as" scalar, list, and hash virtual methods.
+=item Added "fmt" scalar, list, and hash virtual methods.
- [% list.as("%s", ", ") %]
+ [% list.fmt("%s", ", ") %]
- [% hash.as("%s => %s", "\n") %]
+ [% hash.fmt("%s => %s", "\n") %]
=item Whitespace is less meaningful. (TT3)
[% a = 1.2e-20 %]
- [% 123.as('%.3e') %] # = 1.230e+02
+ [% 123.fmt('%.3e') %] # = 1.230e+02
=item Allow for hexidecimal input. (TT3)
[% a = 0xff0000 %][% a %] # = 16711680
- [% a = 0xff2 / 0xd; a.as('%x') %] # = 13a
+ [% a = 0xff2 / 0xd; a.fmt('%x') %] # = 13a
=item FOREACH variables can be nested.
=item There are no references.
-There was in initial beta tests, but it was decided to remove the little used feature.
-
-It makes it the same as
-
- [% obj.method("foo") %]
-
-This is removed in CET.
+There were in initial beta tests, but it was decided to remove the little used feature which
+took a length of code to implement.
=item The DEBUG directive is more limited.
=item There is no ANYCASE configuration item.
-There was in initial beta tests, but it was dropped in favor of consistent parsing syntax.
+There was in initial beta tests, but it was dropped in favor of consistent parsing syntax (and
+a minimal amount of speedup).
=item There is no V1DOLLAR configuration item.
[% 314159e-5 + 0 %] Prints 3.14159.
- [% .0000001.as('%.1e') %] Prints 1.0e-07
+ [% .0000001.fmt('%.1e') %] Prints 1.0e-07
Hexidecimal input is also supported.
[% 0xff + 0 %] Prints 255
- [% 48875.as('%x') %] Prints beeb
+ [% 48875.fmt('%x') %] Prints beeb
=item Single quoted strings.
=item '0'
- [% item = 'foo' %][% item.0 %] Returns self. Allows for scalars to mask as arrays.
-
-=item as
-
- [% item.as('%d') %]
-
-Similar to format. Returns a string formatted with the passed pattern. Default pattern is %s.
+ [% item = 'foo' %][% item.0 %] Returns self. Allows for scalars to mask as arrays (scalars
+ already will, but this allows for more direct access).
=item chunk
Same as the redirect filter.
+=item fmt
+
+ [% item.fmt('%d') %]
+
+Similar to format. Returns a string formatted with the passed pattern. Default pattern is %s.
+
=item format
- [% item.format('%d') %] Print the string out in the specified format. Each line is
+ [% item.format('%d') %] Print the string out in the specified format. It is similar to
+ the "as" virtual method, except that the item is split on newline and each line is
processed separately.
=item hash
=item remove
- [% item.remove("\s+") %] Same as remove - but is global and replaces with nothing.
+ [% item.remove("\s+") %] Same as replace - but is global and replaces with nothing.
=item redirect
[% item.replace("\s+", " ") %] Globally replace all space with
- [% item.replace("foo", "bar", 0) Replace only the first instance of foo with bar.
+ [% item.replace("foo", "bar", 0) %] Replace only the first instance of foo with bar.
[% item.replace("(\w+)", "($1)") %] Surround all words with parenthesis.
=item search
- [% item.search("(\w+)" %] Tests if the given pattern is in the string.
+ [% item.search("(\w+)") %] Tests if the given pattern is in the string.
=item size
=over 4
-=item as
+=item fmt
- [% mylist.as('%s', ', ') %]
+ [% mylist.fmt('%s', ', ') %]
Passed a pattern and an string to join on. Returns a string of the values of the list
formatted with the passed pattern and joined with the passed string.
=over 4
-=item as
+=item fmt
- [% myhash.as('%s => %s', "\n") %]
+ [% myhash.fmt('%s => %s', "\n") %]
Passed a pattern and an string to join on. Returns a string of the key/value pairs
of the hash formatted with the passed pattern and joined with the passed string.
=item C<.>
-Binary. The dot operator. Allows for accessing sub-members, methods, or
+The dot operator. Allows for accessing sub-members, methods, or
virtual methods of nested data structures.
my $obj->process(\$content, {a => {b => [0, {c => [34, 57]}]}}, \$output);
=item C<|>
-Binary. The pipe operator. Similar to the dot operator. Allows for
+The pipe operator. Similar to the dot operator. Allows for
explicit calling of virtual methods and filters (filters are "merged"
with virtual methods in CGI::Ex::Template and TT3) when accessing
hashrefs and objects. See the note for the "." operator.
=item C<** ^ pow>
-Binary. X raised to the Y power. This isn't available in TT 2.15.
+Right associative binary. X raised to the Y power. This isn't available in TT 2.15.
[% 2 ** 3 %] => 8
=item C<!>
-Unary not. Negation of the value.
+Prefix not. Negation of the value.
=item C<->
=item C<*>
-Binary. Multiplication.
+Left associative binary. Multiplication.
=item C</ div DIV>
-Binary. Division. Note that / is floating point division, but div and
+Left associative binary. Division. Note that / is floating point division, but div and
DIV are integer division.
[% 10 / 4 %] => 2.5
=item C<% mod MOD>
-Binary. Modulus.
+Left associative binary. Modulus.
[% 15 % 8 %] => 7
=item C<+>
-Binary. Addition.
+Left associative binary. Addition.
=item C<->
-Binary. Minus.
+Left associative binary. Minus.
=item C<_ ~>
-Binary. String concatenation.
+Left associative binary. String concatenation.
[% "a" ~ "b" %] => ab
=item C<< < > <= >= >>
-Binary. Numerical comparators.
+Non associative binary. Numerical comparators.
=item C<lt gt le ge>
-Binary. String comparators.
+Non associative binary. String comparators.
=item C<== eq>
-Binary. Equality test. TT chose to use Perl's eq for both operators.
+Non associative binary. Equality test. TT chose to use Perl's eq for both operators.
There is no test for numeric equality.
=item C<!= ne>
-Binary. Non-equality test. TT chose to use Perl's ne for both
+Non associative binary. Non-equality test. TT chose to use Perl's ne for both
operators. There is no test for numeric non-equality.
=item C<&&>
-Multiple arity. And. All values must be true. If all values are true, the last
+Left associative binary. And. All values must be true. If all values are true, the last
value is returned as the truth value.
[% 2 && 3 && 4 %] => 4
=item C<||>
-Multiple arity. Or. The first true value is returned.
+Right associative binary. Or. The first true value is returned.
[% 0 || '' || 7 %] => 7
+Note: perl is left associative on this operator - but it doesn't matter because
+|| has its own precedence level. Setting it to right allows for CET to short
+circuit earlier in the expression optree (left is (((1,2), 3), 4) while right
+is (1, (2, (3, 4))).
+
=item C<..>
-Binary. Range creator. Returns an arrayref containing the values
+Non associative binary. Range creator. Returns an arrayref containing the values
between and including the first and last arguments.
[% t = [1 .. 5] %] => variable t contains an array with 1,2,3,4, and 5
=item C<? :>
-Ternary. Can be nested with other ?: pairs.
+Ternary - right associative. Can be nested with other ?: pairs.
[% 1 ? 2 : 3 %] => 2
[% 0 ? 2 : 3 %] => 3
=item C<*= += -= /= **= %= ~=>
-Self-modifying assignment. Sets the left hand side
+Self-modifying assignment - right associative. Sets the left hand side
to the operation of the left hand side and right (clear as mud).
In order to not conflict with SET, FOREACH and other operations, this
operator is only available in parenthesis.
=item C<=>
-Assignment. Sets the left-hand side to the value of the righthand side. In order
+Assignment - right associative. Sets the left-hand side to the value of the righthand side. In order
to not conflict with SET, FOREACH and other operations, this operator is only
available in parenthesis. Returns the value of the righthand side.
=item C<not NOT>
-Lower precedence version of the '!' operator.
+Prefix. Lower precedence version of the '!' operator.
=item C<and AND>
-Lower precedence version of the '&&' operator.
+Left associative. Lower precedence version of the '&&' operator.
=item C<or OR>
-Lower precedence version of the '||' operator.
+Right associative. Lower precedence version of the '||' operator.
=item C<hash>
-Multiple arity. This operator is not used in TT. It is used internally
+This operator is not used in TT. It is used internally
by CGI::Ex::Template to delay the creation of a hash until the
execution of the compiled template.
=item C<array>
-Multiple arity. This operator is not used in TT. It is used internally
+This operator is not used in TT. It is used internally
by CGI::Ex::Template to delay the creation of an array until the
execution of the compiled template.
Hello.
- [%- "Hi." -%]
+ [%= "Hi." =%]
Howdy.
Hello.
- [%- "Hi." -%]
+ [%~ "Hi." ~%]
Howdy.
my $str = q{
[% a = "Hello" %]
- 1([% a | filter1 %])
- 2([% a | filter2 %])
- 3([% a | filter3 %])
+ 1 ([% a | filter1 %])
+ 2 ([% a | filter2 %])
+ 3 ([% a | filter3 %])
};
my $obj = CGI::Ex::Template->new(FILTERS => $filters);
Would print:
- (11111)
- (22222)
- (33333)
+ 1 (11111)
+ 2 (22222)
+ 3 (33333)
Filters passed in as an arrayref should contain a coderef and a value
indicating if they are dynamic or static (true meaning dynamic). The
=item UNDEFINED_ANY
This is not a TT configuration option. This option expects to be a code
-ref that will be called if a variable is undefined during a call to get_variable.
+ref that will be called if a variable is undefined during a call to play_expr.
It is passed the variable identity array as a single argument. This
is most similar to the "undefined" method of Template::Stash. It allows
for the "auto-defining" of a variable for use in the template. It is
CGI::Ex::Template uses its own mechanism for loading filters. TT
would use the Template::Filters object to load filters requested via the
FILTER directive. The functionality for doing this in CGI::Ex::Template
-is contained in the list_filters method and the get_variable method.
+is contained in the list_filters method and the play_expr method.
Full support is offered for the FILTERS configuration item.
may be more appropriate to say we are parsing a term or an expression).
The following table shows a variable or expression and the corresponding parsed tree
-(this is what the parse_variable method would return).
+(this is what the parse_expr method would return).
one [ 'one', 0 ]
one() [ 'one', [] ]
Executes a parsed tree (returned from parse_tree)
-=item C<get_variable>
+=item C<play_expr>
Turns a variable identity array into the parsed variable. This
method is also responsible for playing operators and running virtual methods
Allow for the multitudinous ways that TT parses arguments. This allows
for positional as well as named arguments. Named arguments can be separated with a "=" or "=>",
and positional arguments should be separated by " " or ",". This only returns an array
-of parsed variables. To get the actual values, you must call get_variable on each value.
+of parsed variables. To get the actual values, you must call play_expr on each value.
=item C<parse_tree>
Used by load_parsed_tree. This is the main grammar engine of the program. It
uses method in the $DIRECTIVES hashref to parse different DIRECTIVE TYPES.
-=item C<parse_variable>
+=item C<parse_expr>
Used to parse a variable, an expression, a literal string, or a number. It
returns a parsed variable tree. Samples of parsed variables can be found in the VARIABLE PARSE TREE
=item C<undefined_any>
-Called during get_variable if a value is returned that is undefined. This could
+Called during play_expr if a value is returned that is undefined. This could
be used to magically create variables on the fly. This is similar to Template::Stash::undefined.
It is suggested that undefined_get be used instead. Default behavior returns undef. You
may also pass a coderef via the UNDEFINED_ANY configuration variable. Also, you can try using
Methods by these names implement virtual methods that are more than one line.
-=item C<weak_copy>
-
-Used to create a weak reference to self to avoid circular references. (this
-is needed by macros)
-
=back