Пользователь
0,0
рейтинг
18 апреля 2011 в 11:36

Разработка → Mojolicious v1.12

Perl*
Я обнаружил что релиз замечательного перлового фреймворка 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, в которой исправлена серьезная уязвимость
heoh @heoh
карма
18,2
рейтинг 0,0
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама

Самое читаемое Разработка

Комментарии (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 релиза за день! =)

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