Usted está buscando:
DEBUG_UNDEF
Esta opción hace que el Template Toolkit para lanzar un error 'no def' siempre que encuentre un valor de variable no definida.
use Template::Constants qw(:debug);
my $template = Template->new({
DEBUG => DEBUG_UNDEF,
});
(De http://search.cpan.org/dist/Template-Toolkit/lib/Template/Manual/Config.pod.)
Si desea hacer algún tratamiento especial de la excepción, tendrá que to catch it or replace the __DIE__
signal handler.
Digámoslo juntos:
#!/usr/bin/perl
use strict;
use warnings;
use Template;
use Template::Constants qw(:debug);
my $debug_tt = Template->new({
DEBUG => DEBUG_UNDEF,
});
my $tt = Template->new();
my $vars = {
something => "42",
};
my $template = <<EOF;
First something undefined: [% nothing %].
And now something defined: [% something %].
EOF
my $output = '';
eval {$debug_tt->process(\$template, $vars, \$output)};
warn $debug_tt->error() if $debug_tt->error();
$tt->process(\$template, $vars);
la salida es:
undef error - nothing is undefined
First something undefined: .
And now something defined: 42.
Mi enfoque era utilizar dos instancias diferentes de la clase de plantilla:
$debug_tt
que tiene el indicador DEBUG_UNDEF
se activó y oculta su salida en la variable $output
.
$tt
que es una instancia de vanilla e imprime su salida a STDOUT
como es el valor predeterminado.
Ambas instancias usan la misma plantilla almacenada en $template
y el mismo hash variable almacenada en $vars
. $debug_tt
está envuelto en un eval
para evitar salir prematuramente y se emite una advertencia si $debug_tt->error()
es verdadero. $tt
se ejecuta normalmente. Creo que esto satisface tus principales requisitos aunque probablemente no sea eficiente. Necesitamos analizar $template
dos veces usando este método.
Algunos pensamientos que había que trabajan en este:
Hubiera sido agradable si habían usado Template::Toolkit
Carp
para que pudiéramos conseguir un poco más de contexto en la advertencia.
Uno probablemente podría derivar una clase de la plantilla que warn
en lugar de die
en el error. No tenía ganas de hacer eso.
Dependiendo de cómo estén configuradas sus plantillas, podría tener sentido alimentarlo en una línea a la vez para que pueda emitir números de línea cuando se encuentre un valor indefinido.
Debería ser posible modificar las plantillas para probar sus propios errores y emitir texto más sensible frente a valores indefinidos.
Lo vi, pero no estaba seguro de si arrojaría un montón de otras cosas también. – cdleary
Además, ¿hay alguna manera de hacer que vaya a un manejador de archivo particular? – cdleary
No sé, lo siento :) Uso Template :: Refine. – jrockway