НАЗВАНИЕ
Mojolicious - Веб в коробке!
СИНОПСИС
# Mojolicious приложение package MyApp; use base 'Mojolicious'; sub startup { my $self = shift; # Routes my $r = $self->routes; # Default route $r->route('/:controller/:action/:id')->to('foo#welcome'); } # Mojolicious контроллер package MyApp::Foo; use base 'Mojolicious::Controller'; # Say hello sub welcome { my $self = shift; $self->render_text('Hi there!'); } # Say goodbye from a template (foo/bye.html.ep) sub bye { shift->render }
ОПИСАНИЕ
Еще в начале дня Интернета была эта прекрасная библиотека Perl называемая CGI, многие люди изучали Perl только из за неё. Она достаточно проста, чтобы начать работу, не зная многого о языке и достаточно мощна, чтобы держать вас в курсе обо всем, что происходит с приложением, обучение на практике было очень увлекательно. Хотя большинство методов, используемых в настоящее время устарело, сама идея остается актуальной. Mojolicious это новая попытка реализации этой идеи c использованием передовых технологий.
Возможности
-
Великолепный MVC веб-фреймворк, позволяющий написать полноценное приложение в одном файле
-
Очень чистый, портативный и объектно-ориентированный чистый Perl API без какой-либо скрытой магии и никаких требований, кроме как поддержка Perl начиная с версии 5.8.7.
-
Полная поддержка HTTP 1.1 и WebSocket клиент/серверая реализация с IPv6, TLS, IDNA, pinelining, распределение памяти и поддержка multipart.
-
Встроенный асинхронный ввод-вывод, prefork-веб с поддержкой epoll и kqueue, "горячая" разработка и использование доменного сокета UNIX (анг. Unix domain socket sharing)
-
Поддержка CGI, FastCGI и PSGI.
-
Свежий код, основанный на многолетнем опыте разработки Catalyst.
-
Мощные возможности из коробки с RESTful роутерами, плагинами, сессиями, signed cookies, сервером статических файлов (static file server), тестированием фреймворка, шаблонизацией в стиле perl, JSON, I18N,
Duct Tape для HTML5 Web
Веб-разработка для людей, делающих сложные вещи возможными и прочие развлечения.
use Mojolicious::Lite; get '/hello' => sub { shift->render(text => 'Hello World!') } get '/time' => 'clock'; websocket '/echo' => sub { my $self = shift; $self->receive_message( sub { my ($self, $message) = @_; $self->send_message("echo: $message"); } ); }; get '/title' => sub { my $self = shift; my $url = $self->param('url'); $self->render(text => $self->client->get($url)->success->dom->at('title')->text); }; post '/:offset' => sub { my $self = shift; my $offset = $self->param('offset') || 23; $self->render(json => {list => [0 .. $offset]}); }; app->start; __DATA__ @@ clock.html.ep % my ($second, $minute, $hour) = (localtime(time))[0, 1, 2]; The time is <%= $hour %>:<%= $minute %>:<%= $second %>.
См. более дружественную к пользователю документацию Mojolicious::Guides и Mojolicious::Lite.
Вот такие пироги (Have Some Cake)
.---------------------------------------------------------------. | Fun! | '---------------------------------------------------------------' .---------------------------------------------------------------. | | | .----------------------------------------------' | | .--------------------------------------------. | Application | | Mojolicious::Lite | | | '--------------------------------------------' | | .--------------------------------------------. | | | Mojolicious | '----------------' '--------------------------------------------' .---------------------------------------------------------------. | Mojo | '---------------------------------------------------------------' .-------. .-----------. .--------. .------------. .-------------. | CGI | | FastCGI | | PSGI | | HTTP 1.1 | | WebSocket | '-------' '-----------' '--------' '------------' '-------------'
Хорошим дополнением к документации Mojolicious послужит приведенная ниже презентация: