Программа, позволяющая полностью управлять статическим и, если того захотеть, динамическим наполнением сайта. Или писать вызовы обращений к базе данных прямо в тексте html-страницы.
Для её запуска необходимы Apache и mod_perl.
В httpd.conf нужно дописать то, о чем написано в
man HTML::Mason. После этого Ваш сайт(вне
зависимости от его размера) ну, если не становится ручным пони, то уж точно
чем нибудь типа уральского тяжеловоза. Все описания и другие оставшиеся
слова можно прочитать на сайте http://www.masonhq.com/. Сначала HTML-Mason, потом
mod_perl, далее
некоторая возня с service httpd restart на предмет "в httpd.conf нужно
дописать то, о чем написано в man HTML::Mason, ну,
примерно то, что нужно
написать". Потом создать директорию /path/to/dir/for/mason.
После её создания пишем
простой test.html:
<HTML>
<HEAD>
<TITLE>Yo! Wazzup!!!!
% my $noun = 'World';
% my $date = qx[date];
Hello <% $noun %>!
Today is <% $date %>
% my $ua = $r->header_in('User-Agent');
% if ($ua =~ /msie/i) {
Welcome, Internet Explorer users
...
% } elsif ($ua =~ /mozilla/i) {
Welcome, Netscape users
...
% }
</TITLE></HEAD>
<BODY BGCOLOR="#FFFFFF">
<H1>Yo! Wazzup!!!!</H1>
<& index.file &>
</BODY>
</HTML>
строчка, в которой содержится сам код, должна начинаться с символа %:% my $noun = 'World';
Если не хочется кадый раз ставить символ процента, то код можно поставить в
между тегами
<%perl>
... to do...
</%perl>
Аналогично директивам SSI из html странички можно вызывать и файлы(в том
числе и текстовые, например если создается библиотека).
<& index.html &>
Можно так-же делать включения скриптов вида
%# <& /include/all_newsheads.msn &>
Хотя так-же спокойно можно включать скрипты командой qx[lalalala]
Например обращение к базе данных на серверной стороне:
<html>
<head><title><% $headline %></title></head>
<body>
<h2><% $headline %></h2>
By <% $author %>, <% $date %><p>
<% $body %>
</body></html>
<%init>
# Fetch article from database
my $dbh = DBI::connect ...;
my $sth = $dbh->prepare("select * from articles where id = ?");
$sth->execute($article_id);
my ($headline,$date,$author,$body) = $sth->fetchrow_array;
# Massage the fields
$headline = uc($headline);
my ($year,$month,$day) = split('-',$date);
$date = "$month/$day";
</%init>
<%args>
$article_id
</%args>
Фактически блок <%init> эквивалентен блоку
<%perl>. При таком введении наиболее читаемые
компоненты (особенно для непрограммистов) содержат HTML в одном непрерывном блоке наверху, с простыми
заменами для динамических элементов, и никаких отвлекающих и запутывающих
блоков кода на perl.
Примеры работы, http://www.pereplet.ru, литературный журнал, где каждое высказывание в дискуссии по определенному произведению прицепляется к определенному произведению html. И практически на одном mason'е написан научный сервер http://www.nature.ru .