Mojolicious v1.12

    Я обнаружил что релиз замечательного перлового фреймворка Mojolicious на Хабре остался совершенно незамеченным. А тем временем, уже доступна версия v1.12, это прискорбно, т.к. теперь на перле стало писать проще чем никогда. Покажу это на реальном примере.

    Недавно меня попросили написать простенький скрипт — запрашивать у гугла количество проиндексированных страниц сайта. Про Mojo* я уже знаю давно, но все никак не доходили руки его попробовать где-нибудь. Скрипт в примере ниже запускается в cgi, хотя можно крутить как под mod_perl, так и под fastcgi.

    Я использовал облегченную lite-версию, скрипт намеренно упрощен, для того чтобы показать идею как просто писать под Mojo* и это действительно рабочий скрипт, а не вымученный синтетический пример из руководства:

    #!/usr/bin/perl
    use strict;
    use Mojolicious::Lite;
    use Mojo::UserAgent;
    
    get '/' => sub {    
        my $self = shift;
        my $site = $self->param('site');  # берется переменная из адресной строки
        my $text;
        if($site) {
            my $ua = Mojo::UserAgent->new; # создаем объект UserAgent 
            # запрашиваем страницу по адресу "http://www.google.com/search?q=site%3A$site"
            # и из полученной страницы берем содержимое блока <div id="resultStats"> 
            $text = $ua->get("http://www.google.com/search?q=site%3A$site")->res->dom->at('div#resultStats');
        }
        $self->render(
            'index', # название шаблона
            result  => $text ? $text->text : '',  # передаем в шаблон текст блока, если он есть
            site    => $site, # передаем в шаблон имя запрошенного сайта
        );
    };
    app->start;
    
    # ниже в этом же файле объявляем шаблон index.html.ep
    __DATA__
    
    @@ index.html.ep
    <%= $result  %><br />
    <form action="/cgi-bin/get_string.pl">
    site name: <input type="text" name="site" value="<%= $site %>"/>
    <input type="submit" />
    </form>
    


    Вот и все, проще даже чем на php :)

    PS: совсем забыл упомянуть что у Mojolicious появилась вменяемая документация, с примерами: http://mojolicio.us/perldoc

    PPS: фреймворк активно обновляется и как любезно заметил fuksito уже появилась версия 1.16, в которой исправлена серьезная уязвимость
    Метки:
    Поделиться публикацией
    Комментарии 24
    • 0
      Где же ты, обратная совместимость!.. (:
      А так да: больше внимания стабильности, документации, обратной совместимости и, главное, безопасности! (:
      • 0
        да уж, с обратной совместимостью они подобломали… мне пришлось пару раз исправлять плагин для HTML::Template::Pro, потом плюнул, решил дождаться стабильной версии :)
      • 0
        Может всё же не заставлять народ копировать код в редактор и запускать автоформатирование, а пользоваться соотвествующими тегами?
        • 0
          исправил, давно я не писал… столько всего нового понадобавляли :)
        • +2
          Вообще-то уже вышла 1.16 в связи с багом когда можно было вычитать любой файл из системы, не плохая такая дырочка:
          blog.kraih.com/mojolicious-116-emergency-release-please-upgr
          • 0
            вот как? срочно все, обновляемся! а вообще, к сожалению или к счастью, не знаю, я так и не применил Mojo* нигде у себя, в том числе из-за того что все очень сильно меняется от версии к версии
          • +7
            чертовски напоминает sinatra, что на ruby. удивлен насколько легко читается код даже для человека, который perl видит второй раз в жизни.
            • 0
              Если мне не изменяет память, он был написан как раз под впечатлением от синатры.
              • 0
                Это скорее Dancer =)
                • 0
                  Это всё порт синтаксиса Синатры. Так сказать, это формат де-факто стал.
              • –4
                Так в коде-то и не написано почти ничего.
                Чего не читать-то пустой код.
                • 0
                  Ух ты, как людям не нравятся очевидные вещи.

                  Желающим почерпнуть что-нибудь разглядывая короткие сниппеты рекомендую поглядеть сюда — flask.pocoo.org/snippets/

                  Язык там, правда, не Перл, но по большому счету какая разница?
                • +3
                  удивлен насколько легко читается код даже для человека, который perl видит второй раз в жизни.

                  Этот комментарий лучший, спасибо за адекватный подход.
                • 0
                  А что будет, если ua.get() сломается?
                  • 0
                    ну боюсь в этом примере не будет ничего, но и 500ю ошибку вы не получите, а в логе будет сообщение об ошибке, что-то вроде:
                    error Mojo::UserAgent:661 [30908]: Couldn't connect.
                    • 0
                      В смысле шаблон нормально отрендерится, не смотря на то, что данные-то фактически и не были получены из-за какой-то ошибки?

                      Вот она, адская сущность перлистов! :)
                      • 0
                        ну как раз такое поведение не очень характерно для перла, но Mojolicious позволяет делать такие конструкции

                        а я в посте говорил, что это намеренно упрощенный скрипт, конечно по-хорошему надо делать ловлю ошибок, да и входящие данные естественно надо проверять, а не передавать все как есть в шаблон ;)
                  • +3
                    Извиняюсь конечно, но автор из танка выполз, в конце 2010 вышла 1-я версия и до этого 2 года активной разработки.
                    • 0
                      то, что релиз был в конце года много кто знает, но почему-то никто не пишет :)

                      я потому так и начал этот пост и он нисколько претензия на новость, а скорее обзор изменений (если внимательно посмотреть был еще мой пост от 2009 года) и в некотором роде популяризация Mojolicious
                      • 0
                        щас идут битвы Mojolicious vs Dancer
                        • 0
                          я немного далек от этого, у нас на работе идет война с наследием фицпатрика или наверно тех кто после него был :)
                    • 0
                      Так пока эта тема еще жива уже вышел Mojolicious 1.17
                      github.com/kraih/mojo/blob/v1.17/Changes
                      • 0
                        За вчера 3 релиза и в итоге 1.21 :)
                        • 0
                          Вчера много багрепортов запостили, в итоге Ридель все пофикисил и к вечеру уже было 3 релиза за день! =)

                        Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.