Mojolicious
и перловое программирование

Александр Сапожников

Челябинск, Южно-Уральский государственный университет

Мo... Чо?

Mojolicious [моджоли́шес]

Раньше — Mojo

Why Perl?
Веб-разработка — почему всё-таки на перле?

CPAN

cpan.org

The Comprehensive Perl Archive Network (CPAN)
currently has 104,267 Perl modules in 24,326 distributions, written by 9,537 authors, mirrored on 268 servers.

A long long time ago...

#!/usr/bin/perl
use CGI qw/:standard/;

Современные перловые веб-фреймворки

Что может Mojolicious?

Много всякой всячины: сайты и не только

Преимущества и недостатки

Web in a box

Без лишних зависимостей (начиная с Perl 5.10)

Быстроразвивающийся

Mojolicious::Lite — фреймворк для простых сайтов

Проще в освоении, мало кода, хорошо подходит для небольших сайтов.

# Automatically enables "strict", "warnings" and Perl 5.10 features
use Mojolicious::Lite;

# Route with placeholder
get '/:foo' => sub {
    my $self = shift;
    my $foo  = $self->param('foo');
    $self->render(text => "Hello from $foo.");
};

# Start the Mojolicious command system
app->start;

Как запустить?

./your-app-name
Sat Feb 18 04:31:04 2012 info Mojo::Server::Daemon:316 [26077]: Server listening (http://*:3000)
Server available at http://*:3000.

Отладочная информация — в консоль

Sat Feb 18 04:32:57 2012 debug Mojolicious::Plugin::RequestTimer:24 [26119]: GET / (Mozilla/5.0 (X11; Linux i686) AppleWebKit/535.7 (KHTML, like Gecko) Ubuntu/10.10 Chromium/16.0.912.77 Chrome/16.0.912.77 Safari/535.7).
Sat Feb 18 04:32:57 2012 debug Mojolicious::Routes:418 [26119]: Dispatching callback.
Sat Feb 18 04:32:57 2012 debug Mojolicious::Routes:418 [26119]: Dispatching callback.
Use of uninitialized value $w in string eq at /usr/share/perl5/Text/Textile.pm line 1557.
Use of uninitialized value $h in string eq at /usr/share/perl5/Text/Textile.pm line 1558.
Sat Feb 18 04:32:57 2012 debug Mojolicious::Plugin::RequestTimer:48 [26119]: 200 OK (0.054653s, 18.297/s).

Шаблоны

Можно — в теле скрипта в секции __DATA__, можно — отдельными файлами.

В шаблонах, по умолчанию — embedded perl (EP):

@@ tags.html.ep
% layout 'default', 'title' => __ 'Tags';
<ul>
% for my $row ( @$rows ) {
%   my $link = $row;
%   $link =~ tr/ /_/;
    <li><a href="<%= url_for "/tags/$link" %>"><%= $row %></a></li>
% }
</ul>
@@ layouts/error.html.ep
<!DOCTYPE html>
<html>
    <head>
% $title = b( $title || __ 'ERROR' )->decode('UTF-8')->to_string; 
        <title><%= $title %></title>
        <style type="text/css">
            body{background:#fec;color:#000}h1{color:#900}
        </style>
    </head>
    <body>
%= include 'menu';
        <%= content %>
    </body>
</html>

EPL, POD, TT...

Куда расти?

-Mojo

perl -Mojo -e \
'b(g("uwdc.ru")->dom->at("title")->text)->say'
UWDC-2012
perl -Mojo -e 'a("/" => {text => "Hello Mojo!"})->start' daemon
Server available at http://*:3000.
  • b — Mojo::ByteStream
  • d/f/g/h/p/u — DELETE/POST/GET/HEAD/POST/PUT
  • x — Mojo::DOM
  • Примеры

    Что читать?

    Ещё вопросы?

    Спасибо за внимание!

    QR-codeАлександр Сапожников

    shoorick.ru

    as@susu.ru

    Иконки shoorick77

    Челябинск, Южно-Уральский государственный университет

    shoorick.ru/slide/uwdc-mojo.html
    t.co/JMOxJuXU

    UWDC-2012