Как я могу получить простоту PHP (развертывания), но мощь Perl? - PullRequest
19 голосов
/ 26 сентября 2008

Я презираю язык PHP, и я совершенно уверен, что я не одинок. Но отличительной особенностью PHP является то, что mod_php берет и скрывает мельчайшие детали интеграции со средой исполнения Apache и обеспечивает CGI-подобную изоляцию запросов и достойную производительность.

Какой подход наименьшего расстояния позволяет получить ту же простоту, скорость и изоляцию, что и среда выполнения PHP, с семантикой Perl? Я чувствую, что raw mod_perl дает мне слишком много веревки, чтобы повеситься: глобальные запросы с перекрестными запросами, грязный конфиг, слишком много шаблонных движков на выбор.

FastCGI? HTML :: Mason? Я бы хотел заниматься разработкой в ​​основном на Perl, если бы у меня была среда, которая позволяла мне.

Ответы [ 12 ]

18 голосов
/ 26 сентября 2008

Посмотрите на Catalyst , этот MVC (модель, представление, контроллер) работает автономно или с apache_perl и скрывает много грязных битов. Есть немного странная кривая обучения (быстрый старт, медленный средний, тогда это действительно нужно для продвинутых вещей).

Catalyst позволяет вам использовать Template Toolkit , чтобы отделить логику проектирования от бизнес-логики. Template Toolkit действительно хорош, даже если вы решите не использовать Catalyst, тогда вы должны его использовать. HTML :: Mason - это не то, что мне лично нравится, хотя, если вы делаете весь HTML самостоятельно, вы можете рассмотреть Template :: Declare , который является еще одной альтернативой, которую вы также можете использовать с Catalyst.

Что касается базы данных, посмотрите на DBIx :: Class , которая снова работает с Catalyst или самостоятельно.

7 голосов
/ 09 февраля 2010

Я только что видел Танцор . Похоже, это может быть хорошим вариантом.

6 голосов
/ 26 сентября 2008

Ближайший, уважаемый эквивалент PHP в Perl, вероятно, HTML :: Mason .

Как и PHP, он встраивает Perl в ваш документ и отображает его:

% my $noun = 'World';
Hello <% $noun %>!
How are ya?

Книга О'Рейли Встраивание Perl в HTML с Мейсоном доступно онлайн бесплатно.

6 голосов
/ 26 сентября 2008

Я бы рекомендовал Катализатор с FastCGI. Кроме того, для шаблонов Template :: Toolkit мой личный фаворит, но HTML :: Mason также высоко ценится в сообществе.

4 голосов
/ 26 сентября 2008

Есть много возможностей, в зависимости от того, что вы хотите сделать.

Если вы хотите воспользоваться преимуществами скорости mod_perl, но простотой ванильного CGI, посмотрите дистрибутив Modperl :: Registry из CPAN. Это позволит вам запускать ваши простые CGI-скрипты практически без изменений.

Что касается фреймворков, я большой поклонник CGI :: Application . Он предоставляет очень простую инфраструктуру, основанную на наследовании, которая обрабатывает почти все, что потребуется веб-приложению, предоставляя вам свободу в разработке приложения так, как вам нравится. Простое приложение можно сделать монолитным способом; более сложный может использовать полноценный MVC дизайн. Как и Perl в целом, CGI-App предоставляет вам множество возможностей и, как правило, остается в стороне.

CGI-App по умолчанию поддерживает превосходный модуль HTML :: Template и имеет плагины для других систем шаблонов, таких как впечатляющий Template Toolkit . Есть также множество плагинов для других целей.

Если вы хотите, чтобы за вас делали больше, посмотрите Catalyst . Этот способ работы может быть более знаком, если вы использовали Ruby on Rails.

Другие популярные фреймворки веб-приложений включают Jifty и CGI :: Prototype , написанные Рэндалом Шварцем, основанные на объекте Class :: Prototyped основа.

3 голосов
/ 18 октября 2011

Если бы Радостный существовал, когда я задал этот вопрос, я сомневаюсь, что спросил бы его.

В частности, Mojolicious :: Lite

3 голосов
/ 26 сентября 2008

Такие вещи, как 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.

3 голосов
/ 26 сентября 2008

Интересно, что стало с mod_perlite , который собирался предоставить точно того, что вы ищете.

3 голосов
/ 26 сентября 2008

Вышеупомянутый Catalyst - прекрасный инструмент для создания целых веб-приложений, но он ни в коем случае не прост. Основным преимуществом PHP является то, что вы можете встраивать его небольшими частями по мере необходимости в статические страницы, то есть вы можете делать:

<html> <body> <p>The value of 2+2 is: <?php echo 2+2; ?></p> </body></html>

и посмотрите в своем веб-браузере:

The value of 2+2 is: 4

Если вы попытаетесь сделать что-то подобное с Catalyst (насколько я знаю), вы разрабатываете целое приложение с несколькими файлами для печати простого значения. По крайней мере, нет объяснения того, как сделать простое встраивание в учебники, которые я видел.

К счастью, этот уровень простоты может быть достигнут с Мейсоном, который в некоторых отношениях (благодаря силе Perl) может быть еще проще. Приведенный выше пример гласит:

<html><body><p>The value of 2+2 is: <% 2+2 %></p></body></html>

и вы получите тот же результат.

Нет никаких причин, по которым вы не можете начать с установки и работы с Mason, а затем установить Catalyst рядом с ним, однако, если вы планируете перейти к очень сложным, чисто Perl-управляемым проектам позже.

1 голос
/ 31 декабря 2008

Самым близким к простоте PHP является HTML :: Mason.

Предположение, что Catalyst - плохая шутка для тех, кто ищет простоту ... И я с удовольствием работаю с Catalyst каждый день.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...