2010-08-08 14 views
1

du mal à trouver la syntaxe correcte pour la création d'une liste de définitions via Perl pour créer une sortie comme suit:perl cgi | Définition Liste syntaxe

<dt>One</dt> 
     <dd><p>Testing 1</p></dd> 
<dt>Two</dt> 
     <dd><p>Testing 2</p></dd> 
<dt>Three</dt> 
     <dd><p>Testing 3</p></dd> 
</dl> 

Je ne peux pas sembler trouver de la documentation sur l'utilisation. J'ai essayé $cgi->dl($cgi->dt([One,Testing1,Two,Testing2,Three,Testing3]))); et d'autres variations, mais jusqu'à présent, pas de chance. La recherche sur Google ou perldoc n'a pas aidé jusqu'à présent.

+0

Êtes-vous en utilisant 'use strict; utiliser des avertissements; '? Le code que vous avez inclus contient des erreurs de syntaxe. – Ether

+0

S'il vous plaît arrêter d'utiliser le vieux CGI.pm sale. Utilisez plutôt un moteur web moderne et propre tel que [Dancer] (http://www.perldancer.org/) ou [Mojolicious] (http://mojolicious.org/). – dolmen

Répondre

3
print $cgi->dl(
     $cgi->dt('One'), 
     $cgi->dd(
       $cgi->p('Testing 1') 
     ), 
     $cgi->dt('Two'), 
     $cgi->dd(
       $cgi->p('Testing 2') 
     ), 
     $cgi->dt('Three'), 
     $cgi->dd(
       $cgi->p('Testing 3') 
     )); 

Je voudrais vraiment basculer sur modèle-boîte à outils au lieu de générer la structure de données en utilisant CGI.pm bien.

+0

Super merci. Essayer de google "Perl cgi Définition List" produit rien de près à ce que je cherchais. Ne serait-il pas possible d'avoir un bon lien RTFM? Je ne connais pas beaucoup Template-Toolkit, je suis plutôt nouveau à Perl, et à moins qu'il ne soit déjà installé, je ne pense pas que ce soit quelque chose que je puisse utiliser pour ce projet étant donné que ce système est déjà configuré pour un usage spécifique et je ne veux pas courir le risque d'une panne essayant d'y mettre quelque chose de nouveau. – Mose

+0

http://template-toolkit.org/ - Si ce n'est pas déjà fait, alors Local :: Lib vous permettra de l'installer et toutes les dépendances dont il a besoin dans un chemin de bibliothèque séparé pour ne pas interférer avec autre chose sur le système. – Quentin

2

David est correct à propos de la syntaxe et la suggestion d'utiliser Template::Toolkit. Ou un autre module de template.

Voici un exemple simple qui génère une page à partir d'un modèle dans la section DATA d'un script.

Bien sûr, le vrai pouvoir vient quand vous conservez des fichiers modèles distincts et les réutilisez et les combinez.

#!perl 

use strict; 
use warnings; 

use Template; 

my $page_data = { 
    title => 'DL Demo', 
    data => [ 
     { terms => ['One Term'], 
      data => ['One Definition'], 
     }, 
     { terms => [qw(Many Terms)], 
      data => ['One Definition'], 
     }, 
     { terms => ['One Term'], 
      data => [qw(Many Definitions)], 
     }, 
    ], 
}; 

my $tt = Template->new() or die "Ugh"; 

$tt->process(\*DATA, $page_data); 


__DATA__ 

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Strict//EN"> 
<html> 
    <head> 
    <title>[% title %]</title> 
    </head> 
    <body> 
    <div id="header"> 
     <a href="/index.html" class="logo" alt="Home Page"></a> 
     <h1 class="headline">[% title %]</h1> 
    </div> 

    <div id="data"> 
     <dl> 
     [% FOREACH item = data %] 
     [% FOREACH term = item.terms %] <dt> [% term %] </dt> [% END %] 
     [% FOREACH defdata = item.data %] <dd> [% defdata %] </dd> [% END %] 
     [% END %] 
     </dl> 
    </div> 


    </body> 
</html> 

est ici la sortie:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Strict//EN"> 
<html> 
    <head> 
    <title>DL Demo</title> 
    </head> 
    <body> 
    <div id="header"> 
     <a href="/index.html" class="logo" alt="Home Page"></a> 
     <h1 class="headline">DL Demo</h1> 
    </div> 

    <div id="data"> 
     <dl> 

     <dt> One Term </dt> 
     <dd> One Definition </dd> 

     <dt> Many </dt> <dt> Terms </dt> 
     <dd> One Definition </dd> 

     <dt> One Term </dt> 
     <dd> Many </dd> <dd> Definitions </dd> 

     </dl> 
    </div> 

    </body> 
</html> 
+0

Je vais devoir jeter un oeil à ça, ça a l'air intéressant. Je ne sais pas si je peux suivre cette route sur ce projet particulier car la boîte que j'écris un script pour avoir des paquets spécifiques installés pour exécuter une application propiétaire donc j'essaye de travailler avec les modules qui existent déjà (je ne veux pas être responsable pour casser quelque chose :) Merci pour l'info. – Mose

+0

@mose, sérieusement envisager d'utiliser l'un des nombreux modules de modélisation sur CPAN. Si vous en choisissez un avec des dépendances minces, il sera facile de le distribuer avec votre script et tous les autres modules qu'il utilise. IIRC, HTML-Template n'a pas de dépendances non-core (pour Perl après 5.8). Vous devriez être capable de le décomposer dans votre répertoire de script avec vos autres modules et être prêt à partir. – daotoad