La forma programática es generando el contenido desde el propio programa.
Tienes un ejemplo en mi
CGI mínimo. Ahí ves cómo se pueden usar los métodos que el módulo CGI tiene, para generar código HTML.
En CPAN
tienes 999 módulos más.
Y en la forma de plantillas, creas una plantilla HTML en un archivo externo y luego, desde el programa, creas una nueva página a partir de la forma de la plantilla, cambiando las partes dinámicas. Ejemplo de esto es HTML::Template
Por ejemplo, tenemos la siguiente plantilla:
Using html4strict Syntax Highlighting
<html>
<head><title>Test Template</title></head>
<body>
Mi directorio principal es <TMPL_VAR NAME=HOME>
<p>
Mi PATH tiene este valor: <TMPL_VAR NAME=PATH>
</body>
</html>
Coloreado en 0.002 segundos, usando
GeSHi 1.0.8.4
Ahora puedes usarla en un pequeño programa CGI:
Using perl Syntax Highlighting
#!/usr/bin/perl -w
use HTML::Template;
# abrir la plantilla html
my $template = HTML::Template->new(filename => 'test.tmpl');
# rellenar los parámetros
$template->param(HOME => $ENV{HOME});
$template->param(PATH => $ENV{PATH});
# mandar el obligatorio Content-Type e imprimir la salida de la plantilla
print "Content-Type: text/html\n\n", $template->output;
Coloreado en 0.003 segundos, usando
GeSHi 1.0.8.4
Si todo está bien en el universo, debería mostrar algo parecido a esto, en tu navegador web cuando visites el CGI:
Using text Syntax Highlighting
Mi directorio principal es /home/some/directory
Mi PATH tiene este valor: /bin;/usr/bin
Coloreado en 0.000 segundos, usando
GeSHi 1.0.8.4
En Perl tienes docenas, docenas y docenas de sistemas de plantillas. De los más famosas está
Template Toolkit, que puede aplicarse a cualquier tipo de salida, no solo HTML.