Question: I have been using template toolkit for extending an existing domain specific language(verilog) for over 3 years now. While overall I am happy with it, the major irritant is that when there is a syntax/undef error the error message does not contain the correct line number information to debug the error.

e.g. I would get a message indicating "0 is not defined" since I would be using [%x.0%] and similar constructs at multiple locations in the file figuring out which line has the problem becomes difficult.

TT3 seems to be under development indefinitely

My question to the gurus is is there a better alternative to TT. My requirements are

1. Support for complex data structures
2. Good error reporting and debug capabilities.
3. Stable and proven ( no alpha/beta level engines)
4. Extensible (plugin's etc)
5. Should not be restricted to a given language (html etc.)
6. support for IF/Else, looping(foreach while), Loop indexing, etc.
7. Preferably perl
8. Support for data dumper or equivalent plugin from within the template is a plus

Answer: 
[Mojolicious](http://mojolicio.us) comes with its own templating system [Mojo::Template](http://mojolicio.us/perldoc/Mojo/Template). Its lightweight and can be used even outside of the mojolicious system. Here is an example from the docs:

```
use Mojo::Template;
  my $mt = Mojo::Template->new;

  # Simple
  my $output = $mt->render(<<'EOF');
  % use Time::Piece;
  <!DOCTYPE html>
  <html>
    <head><title>Simple</title></head>
    % my $now = localtime;
    <body>Time: <%= $now->hms %></body>
  </html>
  EOF
  say $output;

```

and another

```
  # More advanced
  my $output = $mt->render(<<'EOF', 23, 'foo bar');
  % my ($number, $text) = @_;
  %= 5 * 5
  <!DOCTYPE html>
  <html>
    <head><title>More advanced</title></head>
    <body>
      test 123
      foo <% my $i = $number + 2; %>
      % for (1 .. 23) {
      * some text <%= $i++ %>
      % }
    </body>
  </html>
  EOF
  say $output;

```
take a look on [Template::Semantic](http://search.cpan.org/~tomita/Template-Semantic/) for pure template abstraction