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>
Êtes-vous en utilisant 'use strict; utiliser des avertissements; '? Le code que vous avez inclus contient des erreurs de syntaxe. – Ether
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