Bienvenido a los foros de Perl en Español, Skriptke.
Lo primero, darte las gracias y la enhorabuena por desarrollar un proyecto de este calibre. Se agradece muchísimo, y, desde aquí, te apoyaremos en todo lo que podamos asesorar.
Lo segundo, decirte que en Perl ya existen algunos entornos de trabajo (
frameworks) y sistemas de plantillas (
templates) que siguen las indicaciones marcadas por tu NES: separar el código de programa de la presentación HTML. Incluso también separar la parte de acceso a base de datos, con lo que entonces disponemos de un auténtico paradigma
MVC.
Lejos quedan los tiempos en que hacíamos cosas como
Using perl Syntax Highlighting
#!/usr/bin/perl
print "Content-type: text/html\n\n";
print "<html>\n";
print "<body>\n";
for ($i = 1; $i <= 10; $i++) {
print "<p>Valor de i: $i</p>\n";
}
print <<'EOL';
<hr>
<a href="http://perlenespanol.com/">Ir a Perl en Español</a>
</html>
</body>
EOL
Un auténtico lío para la persona que lo iba a mantener, al mezclar código Perl y HTML. Vamos, como el PHP de hace años
Hace más de 10 años que salió el módulo CGI, y desde entonces, las cosas se han aliviado bastante:
Using perl Syntax Highlighting
#!/usr/bin/perl
use CGI qw(:standard);
use HTML::Entities;
my $salida;
for my $i (1 .. 10) {
$salida .= p("Valor de i: $i") . "\n";
}
print
header,
start_html('Prueba'),
$salida,
hr,
a({-href => 'http://perlenespanol.com/'}, encode_entities('Ir a Perl en Español')),
end_html,
;
que, aunque facilita mucho más la claridad y mantenimiento del código, al esconder la generación de HTML en forma de llamadas a funciones, siguen existiendo partes que a veces requieren un gran trabajo: observa cómo de largo es crear un enlace de tipo 'a', incluyendo la llamada a una función externa para conseguir que nos escape la letra 'ñ' (si no hubiera esa letra ahí, no sería necesario, claro).
Y casi al mismo tiempo salieron los sistemas de plantillas, que separaron definitivamente ambos mundos. Primero la parte de HTML:
Using html4strict Syntax Highlighting
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US" xml:lang="en-US">
<head>
<title>Prueba</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
</head>
<body>
<!-- TMPL_VAR NAME="SALIDA" -->
<hr />
<a href="http://perlenespanol.com/">Ir a Perl en Español</a>
</body>
</html>
Y luego la parte de programa:
Using perl Syntax Highlighting
#!/usr/bin/perl
use CGI qw(:standard);
use HTML::Template;
my $salida;
for my $i (1 .. 10) {
$salida .= p("Valor de i: $i") . "\n";
}
my $plantilla = HTML::Template->new(filename => 'plantilla.html');
$plantilla->param(SALIDA => $salida);
print
header,
$plantilla->output,
;
En este caso vemos que seguimos necesitando la ayuda de CGI para seguir generando código HTML, pero si se da el caso de que lo que queremos generar es muy sencillo, pues el sistema de plantillas lo puede realizar completamente:
Using html4strict Syntax Highlighting
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US" xml:lang="en-US">
<head>
<title>Prueba</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
</head>
<body>
<!-- TMPL_LOOP NAME="PARRAFOS" --><p>Valor de i: <!-- TMPL_VAR NAME="SALIDA" --></p>
<!-- /TMPL_LOOP --><hr />
<a href="http://perlenespanol.com/">Ir a Perl en Español</a>
</body>
</html>
Using perl Syntax Highlighting
#!/usr/bin/perl
use HTML::Template;
my @parrafos;
for my $i (1 .. 10) {
push @parrafos, { SALIDA => $i };
}
my $plantilla = HTML::Template->new(filename => 'plantilla.html');
$plantilla->param(PARRAFOS => \@parrafos);
print
header,
$plantilla->output,
;
La salida es la misma en todos los casos, solo que ahora todo el trabajo de generación de HTML recae en la plantilla, y desde el programa solo tenemos que enviar la información a mostrar.
Hoy en día contamos con poderosos entornos de trabajo, como Catalyst, de calidad empresarial, que ofrece una separación completa entre el programa, el diseño, y los datos. Una curva de aprendizaje muy fuerte, al principio, pero de resultados espectaculares en muy poco tiempo.
Te animo a que sigas con tu proyecto, pues seguro que tiene que aportar nuevas ideas que el resto no tiene.
En cuanto a la publicación de código, los perleros más famosos se han pasado todos a github.com, como sitio de trabajo, hasta disponer de algo presentable, antes de subirlo todo a CPAN, que es el lugar que le corresponde estar a todo buen software de Perl.
¡Ánimo!