Alors que @ la réponse d'Eric ne résout la question des postes d'observation, je suggère annexant un espace au lieu de pré-attente une chaîne vide .
La raison est que s'il y a des problèmes dans le modèle, l'erreur sera signalée comme venant du texte du modèle au lieu du numéro de ligne dans le fichier perl (ce que je veux). Voir cet exemple court:
use Template;
my $template = Template->new();
# Clearly a division by zero bug
$template->process(\"[% 1/0 %]")
or die $template->error();
Il en résulte:
undef error - Illegal division by zero at input text line 1.
Ce qui est pas très utile. Je veux l'emplacement du fichier perl. Au lieu de cela, je suggère:
my $template = Template->new();
$template->process(\"[% 1/0 %]")
or die $template->error() . ' ';
qui produit:
undef error - Illegal division by zero at input text line 1.
at test.pl line 11.
De cette façon, je reçois le numéro de ligne dans le fichier perl aussi. Cela semble un peu moche, cependant. (Vous pouvez arrêter de lire maintenant, si vous aimez ...)
Une façon encore plus correcte serait:
use Template;
my $template = Template->new();
$template->process(\"[% 1/0 %]")
or do {
my $error = $template->error . '';
chomp $error;
die $error;
};
qui produit cette sortie:
undef error - Illegal division by zero at input text line 1. at t2.pl line 15.
Mais il est tellement verbeux et a un .
étrange là-bas. Je suis en fait fini par créer:
sub templateError {
my ($template) = @_;
my $string = $template->error->as_string;
chomp $string;
$string =~ s/(line \d+)\.$/$1/;
return $string;
}
...
use Template;
my $template = Template->new();
$template->process (\"[% 1/0 %]")
or die templateError($template);
Alors que je reçois ceci:
undef error - Illegal division by zero at input text line 1 at test.pl line 30.
ainsi que cela pour l'exemple des postes d'observation:
file error - non-existent-file: not found at test.pl line 31.