Самый простой способ встроить Perl в HTML - PullRequest
7 голосов
/ 04 сентября 2010

Я исследовал в Интернете и нашел несколько интересных модулей / платформ Perl, таких как HTML: Mason, HTML :: Embperl или MVC Catalyst, и т. Д., Которые могут позволить мне встраивать Perl в html, подобно PHP-коду внутри HTML.

Однако мой проект Perl должен быть загружен на сервер uni, где предоставляются только ограниченные права и ресурсы.

Например, Apache версии 1.3.3 и Perl версии 5.8.0 (ниже требований Catalyst)

Я использовал скрипт для проверки всех установленных модулей Perl, только эти имена содержат слово "html":

HTML::HeadParser    2.17
HTML::Entities  1.23
HTML::Filter    2.09
HTML::LinkExtor 1.31
HTML::Parser    3.26
HTML::PullParser    2.06
HTML::TokeParser    2.24
HTML::Tagset    3.03
HTML::Form  0.03

Боюсь, что никто из них не позволит мне встроить Perl прямо в html.

Я знаю, что могу использовать простое выражение print вместе с "heredoc" для печати всего на html-странице внутри Perl / CGI, но я считаю, что это нарушает парадигму проектирования MVC и является менее гибким и более сложным для развиваться, главным образом потому, что теперь бизнес-логика перепутана с HTML-разметками.

Мое текущее решение заключается в использовании jQuery для запуска AJAX-запросов на загрузку html в определенные теги со стороны клиента. Таким образом, в этом случае Perl используется только для предоставления доступа к данным на стороне сервера, манипулирования соответствующими данными и предоставления ответов в формате JSON на запросы AJAX.

Интересно, есть ли лучший способ сделать это? Я с трудом могу изменить состояние сервера и не думаю, что системный администратор был бы настолько щедрым для установки любых других модулей Perl.

Обновленная информация:

Основная причина встраивания Perl в html заключается в том, что я очень плохо знаком с программированием на CGI, и, поскольку я более знаком с PHP и jQuery, я хотел бы знать, существует ли правильный способ встраивания Perl непосредственно в html поэтому я могу очень быстро завершить работу над клиентской частью и сосредоточиться на стороне сервера.

Скажи, что-то вроде этого:

<div id='user_status'>Your last visit was :[% getLastVisitDateTime($userId)%]</div>

Пожалуйста, примите мои небольшие знания Perl / CGI и большое спасибо за помощь заранее.

Обновлено 2: Следуя инструкциям на сайте Template Toolkit, я установил этот модуль на свой MacBook Pro, но, к сожалению, не могу установить его на сервер uni по причине разрешения:

Warning: You do not have permissions to install into
 /usr/lib/perl5/site_perl/5.8.0/i386-linux-thread-multi 
at /usr/lib/perl5/5.8.0/ExtUtils/Install.pm line 84.
mkdir /usr/lib/perl5/site_perl/5.8.0/i386-linux-thread-
multi/auto/Template: Permission denied at /usr/lib/perl5/
5.8.0/ExtUtils/Install.pm line 137
make: *** [pure_site_install] Error 255

Так что, к сожалению, я сейчас ищу другие пути ...

Хорошо, похоже, HTML :: Mason не может быть установлен по той же причине. Поэтому я боюсь, что мне нужно найти решение только для .pm, чтобы мне не пришлось ничего устанавливать в среду perl универ-сервера ...

Ответы [ 4 ]

5 голосов
/ 04 сентября 2010

Не вставляйте Perl в HTML.Используйте систему шаблонов, например Template Toolkit или HTML :: Template.Их можно напрямую скопировать на сервер (если вы не используете XS stash для TT) или загрузить порты для этой ОС и распаковать.

4 голосов
/ 09 сентября 2010

Если вам действительно нужно для встраивания perl в HTML, возможно, стоит взглянуть на Mojo::Template.

Это минималистичный и очень простой Perl-ish шаблонный движок, являющийся частью проекта Mojo, что означает, что даже на первичной установке Perl все, что вам нужно сделать, это:

1. Загрузите исходный код. Пример использования git (создает папку mojo в текущем каталоге):

git clone git://github.com/kraih/mojo.git

2. И используйте библиотеку Mojo в вашей программе. Например:

#!/usr/bin/env perl
use strict;
use warnings;

use lib './mojo/lib';    # git clone here
use Mojo::Template;
my $mt = Mojo::Template->new;

print $mt->render_file( 'simple_template.html', 'Title text', 'Header text' );

с примером шаблона с именем simple_template.html :

<html>
% my ($title, $header) = @_;
<head>
    <title><%= $title %></title>
</head>
<body>
    <h1><%= $header %></h1>
    <ul>
        <% for my $i (1..5) { %>
            <li>item <%= $i %></li>
        <% } %>
    </ul>
</body>
</html>

Это работало без заминок для меня на недавно скомпилированном Perl 5.12.2.

NB. И не забывайте, что вы также получаете полный Mojo / Mojolicious веб-фреймворк без дополнительной платы!


Отказ от ответственности :

Как и другие ответы здесь, я обычно избегаю использования встроенных модулей Perl HTML, таких как Mojo::Template, Tenjin, HTML::Embperl и др. Я всегда предпочитал использовать более общую систему шаблонов, такую ​​как Template Toolkit.

Однако я все больше и больше перехожу к решениям для HTML-построителей, а иногда шаблонам push-стиля , как в этих двух SO вопрос / ответ:

/ I3az /

3 голосов
/ 04 сентября 2010

Модули Perl не должны быть установлены администратором. Их можно найти и запустить из любого места, если вы укажете Perl на нужное место.

Для модулей, которые содержат только код Perl (.pm) и не скомпилированный код, это так же просто, как загрузить файлы .pm в правильной структуре каталогов на ваш сайт.

1 голос
/ 05 сентября 2010

Если у вас есть доступ к компилятору и доступ к make на хост-машине, вы можете использовать local :: lib , чтобы избежать необходимости иметь какое-либо отношение к системному perl.

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