2010-09-04 16 views
7

J'ai fait des recherches en ligne et j'ai trouvé plusieurs modules/frameworks Perl intéressants, tels que HTML: Mason, HTML :: Embperl, ou le framework MVC Catalyst, etc. html, de même que le code PHP dans html. Cependant, mon projet Perl doit être téléchargé sur uni server où seuls des privilèges et des ressources limités sont fournis.façon la plus simple d'intégrer Perl en html

Par exemple, la version Apache & Perl version 1.3.3 5.8.0 (inférieur aux besoins de Catalyst)

Je l'ai utilisé un script pour vérifier tous les modules Perl installés, seuls les noms contiennent le mot "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 

Je crains qu'aucun d'entre eux ne puisse me laisser intégrer Perl directement dans le HTML.

Je sais que je peux utiliser la déclaration d'impression simple, avec « heredoc » pour imprimer tout à la page html intérieur Perl/CGI, mais je pense que viole le paradigme de conception MVC et est moins souple et plus complexe à développer, principalement parce que maintenant la logique métier est foiré avec des balises html.

Ma solution actuelle consiste à utiliser jQuery pour déclencher les requêtes AJAX afin de charger du code HTML dans des balises spécifiques du côté client. Dans ce cas, Perl n'est utilisé que pour fournir un accès aux données côté serveur, manipuler les données associées et fournir des réponses au format JSON aux requêtes AJAX.

Je me demande s'il existe une meilleure façon de procéder? Je peux difficilement changer l'état du serveur et je ne pense pas que l'administrateur système serait aussi généreux pour installer d'autres modules Perl.

Mise à jour Infos:

La principale raison de l'intégration de Perl en html est que je suis très nouveau à la programmation CGI, et depuis que je suis plus familier avec PHP et jQuery, je voudrais savoir s'il est un bon moyen d'incorporer Perl directement dans html, donc je peux finir la partie client très rapidement et me concentrer sur le côté serveur.

Say, quelque chose comme ceci:

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

S'il vous plaît garder avec ma petite connaissance de Perl/CGI et un grand merci à l'aide à l'avance.

Mise à jour 2: suivi les instructions du site Web Template Toolkit, j'ai installé ce module sur mon MacBook Pro, mais malheureusement je ne peux pas l'installer sur le serveur uni en raison de l'autorisation raison:

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 

Donc, malheureusement, je Je cherche maintenant d'autres manières ...

D'accord, il semble que HTML :: Mason ne peut pas être installé pour la même raison. J'ai donc peur de devoir trouver une solution .pm pour ne pas avoir à installer quoi que ce soit dans l'environnement perl du serveur uni ...

+0

Si vous voulez installer le module Perl globalement, vous avez besoin des permissions root –

Répondre

3

Les modules Perl ne doivent pas être installés par un administrateur. Ils peuvent être localisés et fonctionner de n'importe où, si vous pointez Perl au bon endroit.

Pour les modules qui contiennent uniquement du code Perl (.pm) et aucun code compilé, c'est aussi simple que de télécharger les fichiers .pm dans la bonne structure de répertoires vers votre site web.

+0

Je pense que vous avez raison, mais je suis également sûr maintenant qu'aucun Template Toolkit, ou HTML :: Mason, ou d'autres modules Perl de modèle/embed peuvent être installés par moi-même sans assez de privilèges. Y a-t-il des modules basés sur .pm qui me permettraient de terminer ma tâche? –

+1

Je crains de ne pas être un expert sur aucun de ces modules.En regardant votre deuxième mise à jour ci-dessus cependant, vous obtenez des erreurs d'autorisation parce que vous essayez d'installer les modules globalement. Vous n'êtes pas obligé de le faire. Vous pouvez les installer dans une zone locale, si vous pouvez trouver la bonne magie pour mettre cela en place. Avez-vous essayé de copier manuellement l'arborescence contenant les fichiers .pm sur votre serveur (en oubliant "make install" etc)? –

5

Ne pas incorporer Perl en HTML. Utilisez un système de template comme Template Toolkit ou HTML :: Template. Ils peuvent être directement copiés sur le serveur (si vous n'utilisez pas de stockage XS pour TT) ou télécharger des ports pour ce système d'exploitation et décompresser.

+0

+1 pour le toolkit de modèle. –

+0

J'aimerais apprendre le Template Toolkit ou d'autres systèmes de gabarits, mais j'ai peu de temps pour ce petit projet. Je suis très novice en matière de programmation CGI avec Perl, donc je préférerais intégrer Perl au format html comme PHP, afin que je puisse passer plus de temps à me concentrer sur la partie logique métier côté serveur. –

+1

@Michael Mao: syntaxe de HTML :: Template est très simple. Regardez aussi Mojo :: Template - il utilise Perl pour les templates. –

1

Si vous avez un accès au compilateur et un accès à créer sur la machine hôte, alors vous pouvez utiliser local::lib pour éviter d'avoir à faire avec le système perl.

+0

@singingfish: Soupir ... Cela me permet de découvrir qu'il y a tellement de modules manquants ou trop anciens là-bas ... très difficile de tout mettre à jour (c'est UNI, de toute façon, que puis-je faire?) :( –

+0

Cela n'a pas vraiment de sens, à moins que vous ne soyez dur avec un quota de disque, local :: lib devrait simplement fonctionner.J'aime l'utiliser avec cpanminus pour rendre les choses encore plus rapides et plus faciles – singingfish

4

Si vraiment vous avez besoin de pour intégrer perl dans HTML alors il pourrait être intéressant de jeter un oeil à Mojo::Template.

Son minimalistes et très simple moteur de template Perl-ish et fait partie du projet Mojo, ce qui signifie que même sur une installation Perl vierge tout ce que vous devez faire est:

1. Téléchargez la source. Exemple d'utilisation git (crée Mojo dossier dans le répertoire courant):

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

2. Et utiliser la bibliothèque Mojo dans votre programme. Pour exemple:

#!/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'); 

par exemple modèle appelé 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> 

Cela a fonctionné sans accrocs pour moi sur un perl 5.12.2 fraîchement compilé.

NB. Et n'oubliez pas que vous bénéficiez également du framework web complet Mojo/Mojolicious sans coût supplémentaire!


Responsabilité:

Comme d'autres réponses ici, j'orienter généralement claire de l'utilisation des modules Perl HTML intégrés comme Mojo::Template, Tenjin, HTML::Embperl et al. Ma préférence a toujours été d'opter pour un système de template plus générique comme Template Toolkit.

Cependant, je me suis déplacé de plus en plus des solutions de constructeur HTML et parfois modules de modèle, pousser comme dans ces deux SO questions/réponses:

/I3az/