Pull to refresh

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, в которой исправлена серьезная уязвимость
Tags:
Hubs:
Total votes 25: ↑20 and ↓5 +15
Views 2.7K
Comments Comments 24