Es el único objeto que tendremos que instanciar en nuestro script Perl. Es un objeto de tipo singleton por lo que devuelve el objeto creado, o la dirección de éste si fue creado previamente:
use Nes; my $nes = Nes::Singleton->new('template.nhtml');
Como parámetro se le pasa la plantilla nhtml cuando queremos ejecutar el script de esta forma:
http://example.com/script.cgi
Pero no es necesario ningún parámetro (si existe es ignorado) si deseamos hacer esto:
http://example.com/template.nhtml
La idea es (y se recomienda) que NES se ejecute siempre de la última forma, desde la plantilla, pero para debug nos vendría mejor poder hacer ejecutar el script de la primera forma o en linea de comandos. De ahí que las dos formas sean posibles.
Por otra parte imaginemos que tenemos un script y dos plantillas, una para Inglés y otra para Español, ejecutando el script tendríamos que hacer algo como esto:
http://example.com/script.cgi?lang=enHe implementar en Perl el código correspondiente para presentar una u otra plantilla. Pero con Nes todo esto es innecesario y con un script podemos mostrar distintas plantillas sin que el script Perl se entere, sin escribir una sola linea de Perl:
use Nes; my $nes = Nes::Singleton->new(); my $nes_tags = {}; $nes_tags->{'number'} = (int rand 10); $nes_tags->out(%$nes_tags);lucky.es.nhtml:
{: NES 1.0 ('lucky.pl') :} <html> <head> <title>Suerte</title> </head> <body> El número de la suerte es: <b>{: $ number :}</b> </body> </html>lucky.en.nhtml:
{: NES 1.0 ('lucky.pl') :} <html> <head> <title>Lucky</title> </head> <body> The lucky number is: <b>{: $ number :}</b> </body> </html>
Podemos incluir el mismo script Perl en distintas plantillas y después hacer:
http://example.com/lucky.en.nhtml http://example.com/lucky.es.nhtml ...
También podemos crear index.nhtml con el objeto go_language
index.nhtml
{: NES 1.0 none :} {: include ( '{: * cfg_obj_top_dir :}/go_language.nhtml', 'es: http://example.com/lucky.es.nhtml', 'en: http://example.com/lucky.en.nhtml', ': http://example.com/lucky.es.nhtml' {: # por defecto :} ) :}
Esto es posible por dos premisas simples:
Intentamos hacer Nes lo más sencillo posible, por lo que Singleton tiene un único método, out:
use Nes; my $nes = Nes::Singleton->new('template.nhtml'); my $nes_tags = {}; $nes_tags->{'var'} = 'Hello!'; $nes->out(%$nes_tags);
Como parámetro pasamos una copia de un Arreglo Asociativo (%$hash) con los datos que queremos sustituir en la plantilla. Enviando una copia evitamos que la plantilla pueda modificar los datos del script.
... my %nes_tags = {}; $nes_tags->{'var'} = 'Hello!'; # pasamos una copia y no la referencia $nes->out(%$nes_tags); .... ó: ... my %nes_tags; $nes_tags{'var'} = 'Hello!'; $nes->out(%nes_tags); ...