Я презираю язык PHP, и я совершенно уверен, что я не одинок. Но самое интересное в PHP – это то, как mod_php берет и скрывает детали gory от интеграции с временем выполнения apache, а также обеспечивает изоляцию запросов и CGI-подобных запросов.
Каков подход с кратчайшим расстоянием для получения такой же простоты, скорости и изоляции, как среда выполнения PHP, с семантикой Perl? Я чувствую, что сырой mod_perl дает мне слишком много веревки, чтобы повесить себя: кросс-запрос глобалы, грязная конфигурация, слишком много шаблонов для выбора.
FastCGI? HTML :: Mason? Я бы хотел сделать развитие в основном в Perl, если бы у меня была инфраструктура, которая позволяла мне.
Посмотрите на Catalyst, эта среда MVC (модель, представление, контроллер) работает в режиме stand-a-lone или с apache_perl и скрывает множество беспорядочных бит. Существует немного странная кривая обучения (быстрый старт, медленнее среднего, затем он действительно нажимает на продвинутые вещи).
Catalyst позволяет использовать Template Toolkit, чтобы отделить логику дизайна от бизнес-логики, набор инструментов Template действительно замечательный, даже если вы решили не использовать Catalyst, тогда вы должны использовать это. HTML :: Mason – это не то, что мне лично нравится, хотя, если вы делаете все сам HTML, вам может потребоваться просмотреть Template :: Declare, что является еще одной альтернативой, которую вы также можете использовать с Catalyst.
Для базы данных смотрите DBIx :: Class , который снова работает с Catalyst или сам по себе.
Я просто видел Танцовщицу . Похоже, это может быть хорошим вариантом.
Я бы рекомендовал Catalyst с FastCGI. Кроме того, для шаблонов Template :: Toolkit является моим личным фаворитом, но HTML :: Mason также высоко ценится в сообществе.
Ближайшим, хорошо расцененным эквивалентом PHP в Perl, вероятно, является HTML :: Mason .
Как и PHP, он встраивает Perl в ваш документ и отображает его:
% my $noun = 'World'; Hello <% $noun %>! How are ya?
Книга O'Reilly Embedding Perl в HTML с Mason доступна онлайн бесплатно.
В зависимости от того, что вы хотите сделать, есть много возможностей.
Если вы хотите воспользоваться скоростью mod_perl, но простота ванильного CGI, проверьте дистрибутив Modperl :: Registry от CPAN. Это позволит вам запускать ваши простые CGI-скрипты в основном без изменений.
Что касается рамок, я большой поклонник CGI :: Application . Он обеспечивает очень простую структуру наследования, которая обрабатывает большинство всего веб-приложения, которое вам нужно будет сделать, предоставляя вам свободу разработки вашего приложения так, как вам нравится. Простое приложение может выполняться монолитно; более сложным может быть использование полноценного MVC- дизайна. Как и в случае с Perl, CGI-приложение предоставляет вам множество возможностей и, как правило, не работает.
CGI-App поддерживает превосходный модуль HTML :: Template по умолчанию и имеет плагины для других систем шаблонов, таких как эффектный Template Toolkit . Существует множество плагинов для других целей.
Если вам нужна дополнительная работа для вас, проверьте Catalyst . Этот способ делать вещи может быть более знакомым, если вы использовали Ruby on Rails.
Другие популярные веб-приложения включают в себя Jifty и CGI :: Prototype , написанные Рэндалом Шварцем, который основан на объектной инфраструктуре класса :: Prototyped .
Вышеупомянутый Catalyst – прекрасный инструмент для создания целых веб-приложений, но он ни в коем случае не является почти простым. Первичная сила PHP заключается в том, что вы можете встраивать небольшие куски из него по мере необходимости в статические страницы, то есть вы можете делать:
<html>
<body>
<p>The value of 2+2 is: <?php echo 2+2; ?></p>
<p>The value of 2+2 is: <?php echo 2+2; ?></p>
</body></html>
и см. в своем веб-браузере:
The value of 2+2 is: 4
Если вы попытаетесь сделать что-то подобное с Catalyst (насколько мне известно), вы разрабатываете целое приложение с несколькими файлами для печати простого значения. По крайней мере, нет объяснений, как делать простые вложения в обучающие программы, которые я видел.
К счастью, этот уровень простоты может быть достигнут с помощью Mason, который в некотором роде (благодаря мощности Perl) может быть еще проще. В приведенном выше примере говорится:
<html><body><p>The value of 2+2 is: <% 2+2 %></p></body></html>
и вы получите тот же результат.
Нет причин, по которым вы не можете начать с установки и работы с Mason, а затем установить Catalyst бок о бок с ним, однако, если вы планируете перейти к очень сложным, чисто Perl-управляемым проектам позже.
Интересно, что стало с mod_perlite , которое собиралось предоставить именно то , что вам нужно.
Такие вещи, как Catalyst и CGI :: Application, являются более эквивалентами Zend Framework, а не самим PHP. Чтобы воспроизвести базовую функциональность для создания веб-страниц, которые PHP предлагает «из коробки», вам понадобятся два модуля CPAN, которые должны быть доступны в каждой базовой установке Perl:
use CGI; use DBI;
Это все, что вам действительно нужно. Теперь вместо:
$_POST['param'] $_GET['param']
у тебя есть:
my $q = new CGI; $q->param('param'); # same for post or get
И вместо:
$dbh = mysql_connect('localhost', 'mysql_user', 'mysql_password'); $sth = mysql_query("SELECT 1 FROM table", $dbh); while($row = mysql_fetch_assoc($sth)) { // do something with $row }
У тебя есть:
my $dbh = DBI->connect('DBI:mysql:host=localhost;', 'mysql_user', 'mysql_password'); my $sth = $dbh->prepare("SELECT 1 FROM table"); $sth->execute(); while(my $row = $sth->fetchrow_hashref) { # do stuff with row }
Код DBI немного сложнее, потому что он предлагает подготовленные статусы и связанные переменные, так что вам не нужно беспокоиться о SQL-инъекциях. PHP не предлагает этого, поэтому вам нужно использовать что-то вроде PDO или написать свой собственный класс базы данных.
Осталось только, если вам нужен HTML-вывод в скрипте. Но ты этого не хочешь? Вы используете HTML :: Template или Template :: Toolkit для этого, так же, как вы должны использовать Smarty или собственные шаблоны в PHP.
Если бы Мохоличный существовал, когда я задавал этот вопрос, я сомневаюсь, что я бы спросил его.
В частности, Mojolicious :: Lite
Я согласен с Аристотелем. mod_perlite звучит как раз то, что вы ищете, если только оно было закончено.
Наиболее близким к PHP с точки зрения простоты является HTML :: Mason.
Предложение Catalyst – плохая шутка для тех, кто ищет простоту … И я счастливо работаю с Catalyst каждый день.
Я работал с HTML :: Mason, сначала взломал RT, а затем создал с ним два сайта. Есть кривая обучения, но это не так уж плохо. Хуже того, я думаю, это установка, но это гораздо больше связано с Apache и mod_perl, чем с Мэйсоном. Как только кусочки на месте, это только так сложно, как вы это делаете (например, Perl).