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
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4
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,
- ;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
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>
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>
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4
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,
- ;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
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>
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>
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
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,
- ;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
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!