Mason - онлайновый парсер статических файлов на perl

Программа, позволяющая полностью управлять статическим и, если того захотеть, динамическим наполнением сайта. Или писать вызовы обращений к базе данных прямо в тексте 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 .