As always, choosing between two similar technologies seems to be mainly a matter of taste and yet another occasion for an holy war. To pacify the situation, let's try to figure out what are these beasts good at.
TT feels more simple.
Consider the following code:
[% IF customer.is_in('GB') %]
We'll ship your order by Royal Mail
[% ELSE %]
Sorry [% customer.firstname %], delivery will take a while.
[% END %]
It's much easier to understand for a non-programmer than the Mason equivalent:
% if ( $customer->is_in('GB') ) {
We'll ship your order by Royal Mail
% } else {
Sorry <% $customer->firstname() %> ...
% }
So here clearly, TT wins, although as a programmer, and specially as a Perl programmer, Mason also feels just fine. However, a designer or a configuration person will feel more at home with TT, as it resembles infamous visual basic excel macros.
Mason simplifies page composition.
Let's implement a set of pages, each with a specific title and content, but with the same structure (here just a navigation box). In fact the common bread of web development
Let's do it in HTML::Mason:
autohandler:
<html>
<head>
<title><& SELF:title &></title>
</head>
<body>
<div id="nav_box">...</div>
<div id="payload">
% $m->call_next();
</div>
</body>
</html>
<%method title>A default title</%method>
content1.html:
<p>content 1</p>
<%method title>Page Content 1</%method>
content2.html
<p>content 2</p>
<%method title>Page Content 2</%method>
etc..
Now let's do it TT:
page:
<html>
<head>
<title>[% title || 'A default title' %]</title>
</head>
<body>
<div id="nav_box">...</div>
<div id="payload">
[% content %]
</div>
</body>
</html>
content1.html:
[%WRAPPER page
title = 'Page content 1'
%]
<p>content 1</p>
[%END%]
content2.html:
[%WRAPPER page
title = 'Page content 2'
%]
<p>content 2</p>
[%END%]
From a programmer's point of view, HTML::Mason wins, as its inheritance mechanism allows much better simplicity, elegance and flexibility in page composition. In this example, I only considered a simple example that's possible to implement both in Mason and in TT, but for more advance use, the inheritance mechanisms (with call to PARENT (super) methods), and other Mason-isms largely beat the TT WRAPPER directive.
❧
To sum up:
- Use Mason where you need elegance and simplicity to build complex things.
- Use TT where the 'easier than Perl' feel is important, with a restricted set of directive to build simple things.
No comments:
Post a Comment