Выглядит неплохо попробуем, спасибо!<br /><br /><div>02.12.2016, 17:39, "Konstantin S. Uvarin via Moscow-pm" <moscow-pm@pm.org>:</div><blockquote type="cite"><div><div dir="ltr"><div style="font-family:monospace,monospace;">Приветствую всех! <br /><br />Сегодня я бы хотел представить веб-фреймворк на перл 5 собственного сочинения, Ниф (Not Even A Framework). Написан он больше для самообразования, т.к. и так их как собак нерезаных, но мне кажется, в нём есть некие здравые идеи. Суть такова:<br /><br />1. Приложение разбивается на маленькие процедуры-хэндлеры, привязанные к пути в URI (см. тж. <a href="https://metacpan.org/pod/Dancer" target="_blank" rel="noopener noreferrer">https://metacpan.org/pod/Dancer</a> )<br /><br />2. Хэндлер получает на вход объект запроса, из которого потом достаются параметры, куки, заголовки и т.д. (см. тж. <a href="https://metacpan.org/pod/Kelp" target="_blank" rel="noopener noreferrer">https://metacpan.org/pod/Kelp</a> )<br /><br />3. Параметры и куки нельзя достать без валидации, например, при помощи регулярного выражения: <br /><br />  $req->param( foo => qr/\d+/ );<br /><br />См. тж. perl -T <br /><br />В качестве альтернативы есть самовалидирующиеся формы на базе Validator::LIVR или самописного каличного движка (но ЛИВР лучше).<br /><br />См. тж. <a href="https://metacpan.org/pod/Validator::LIVR" target="_blank" rel="noopener noreferrer">https://metacpan.org/pod/Validator::LIVR</a> и <a href="https://metacpan.org/pod/Data::CGIForm" target="_blank" rel="noopener noreferrer">https://metacpan.org/pod/Data::CGIForm</a><br /><br />4. Хэндлер может вернуть ссылку на хэш с какими угодно параметрами, которая затем передаётся в шаблонизатор для рендеринга. На данный момент поддерживается Template::Toolkit и JSON/JSONP<br /><br />Также есть ограниченный набор ключей с минусом, которые используются для управления самим фреймворком - -template, -status и т.п<br /><br />5. Хэндлер может выбросить исключение: die 404 - легальный способ вернуть настраиваемую страницу not found. Все нормальные исключения (не трёхцифренные и не специальные объекты самого Neaf) трактуются как error 500.<br /><br />6. Один и тот же код может в неизменном виде запускаться как cgi, psgi и под Apache2 + mod_perl (с некоторым бубном). Также поддерживается дебаг из командной строки:<br /><br />   perl <a href="http://myapp.pl/" target="_blank" rel="noopener noreferrer">myapp.pl</a> --help<br />   perl <a href="http://myapp.pl/" target="_blank" rel="noopener noreferrer">myapp.pl</a> --list<br /><br />7. Кроме этого есть поддержка статических страниц (не надо держать отдельно нормальный веб-сервер, чтобы проверить CSS или логотип), сессий в несколько недоделанном виде (планируется улучшение), отложенные действия, выполняемые после запроса, ну и по мелочи ещё.<br /><br />Пример кода:<br /><br />    use strict;<br />    use warnings;<br />    use MVC::Neaf;<br /><br />    MVC::Neaf->route( "/" => sub {<br />        my $req = shift;<br /><br />        return {<br />            -template => \'Hello, [% name %]!',<br />            -type     => 'text/plain',<br />            name      => $req->param( name => qr/\w+/, "Stranger" ),<br />        },<br />    });<br /><br />На каждую фичу есть небольшой пример, они же используются как дополнительные смоук-тесты к 80% покрытию юнит-тестами. см. <a href="https://github.com/dallaylaen/perl-mvc-neaf/tree/master/example" target="_blank" rel="noopener noreferrer">https://github.com/dallaylaen/perl-mvc-neaf/tree/master/exam…</a><br /><br />Собственно фреймворк:<br /><br /><a href="https://metacpan.org/pod/MVC::Neaf" target="_blank" rel="noopener noreferrer">https://metacpan.org/pod/MVC::Neaf</a><br /><br />Буду рад обратной связи, критике, багрепортам и запросам новых фич (см. тж. <a href="https://github.com/dallaylaen/perl-mvc-neaf/blob/master/TODO" target="_blank" rel="noopener noreferrer">https://github.com/dallaylaen/perl-mvc-neaf/blob/master/TODO</a> )<br /><br />С уважением,<br /><br /></div>-- <br /><div><div dir="ltr"><div><div><div><font face="monospace,monospace">Konstantin S. Uvarin<br /></font></div><font face="monospace,monospace">jabber: see <from><br /></font></div><font face="monospace,monospace">skype: kuvarin<br /></font></div><font face="monospace,monospace"><a href="http://github.com/dallaylaen" target="_blank" rel="noopener noreferrer">http://github.com/dallaylaen</a><br /></font></div></div>
</div></div><div><span>-- <br />Moscow.pm mailing list<br /><a>moscow-pm@pm.org</a> | <a href="http://moscow.pm.org/" target="_blank" rel="noopener noreferrer">http://moscow.pm.org</a><br /></span></div></blockquote><div><br /></div><div><br /></div><div><div>-- <br />С уважением</div><div>Николай Мишин<br /><div> </div></div></div><div><br /></div>