Realmente existen muchas formas de hacer esta misma tarea con Perl.
Ilustraré las mas rápidas usando el módulo Template::Toolkit, que según mis estadísticas viene instalado por defecto en todos lados...
Como ven, el módulo se llama Template, con esto de una vez entramos un poco a los estándares modernos de programación en Perl.
Listo. Ahora solo necesitamos dos archivos: mipagina.pl y plantilla.html, sencillamente no escribiremos código Perl en HTML, asó como hacen con PHP que meten todo en un solo lado con un desorden total. Usaremos el sistema de plantillas para separar el diseño del código de forma elegante.
Primero el código mipagina.pl:
Using perl Syntax Highlighting
#!/usr/bin/perl -w
use CGI qw(:all);
use DBI;
use Template;
print header;
my $host="servidor"; #Servidor donde se aloja la base de datos
my $base_datos="basedatos"; #Nombre de las base de datos
my $usuario="basedatos"; #Usuario de la BD
my $clave="password"; #Password de la BD
my $driver="mysql"; #Utilizamos el driver de mysql
#Conectamos a la base de datos
$dth= DBI->connect ("dbi:$driver:database=$base_datos;host=$host", $usuario, $clave);
#Ejecutamos un select SQL
my $usuarios = $dth->selectall_arrayref("SELECT * FROM USUARIOS",{ Slice => {} });
# ver tutorial de base de datos si no entiendes esta linea
#creamos el objeto template
my $template = Template->new();
#print "". Dumper $s,$usuarios;
# definimos variables a reemplazar en la plantilla
# asignamos a una variable algunos datos obtenidos en usuarios por la consulta a la tabla usuarios
$value = $usuarios->[0]{'nombre'};
$value2 = $usuarios->[0]{'password'};
my $vars = {
usuario1 => $value,
password1 => $value2,
users => $usuarios,
};
# damos el nombre de la plantilla que queremos procesar
my $input = 'plantilla.html';
#procesamos
$template->process($input, $vars) || die $template->error();
Coloreado en 0.004 segundos, usando
GeSHi 1.0.8.4
Ahora plantilla.html
Using html4strict Syntax Highlighting
<HTML><HEAD><title>Mis Usuario</title></HEAD><BODY> <br><h2>Ejemplo de varible.</h2><b>usuario</b> [% usuario1 %] :: <b>password</b> [% password1 %] <br><h2>Ejemplo de un ciclo.</h2> <br>[% FOREACH variable IN users %] Usuario: [% variable.nombre %] / password: [% variable.password %] <br/> <br>[% END %]</BODY></HTML> <br>
Coloreado en 0.002 segundos, usando
GeSHi 1.0.8.4
La idea es usar etiquetas simples en nuestra plantilla para ser reemplazados.