В то время как ответ @ Эрика действительно решает проблему с OP, я предлагаю добавить пробел вместо предварительного ожидания пустой строки.
Причина в том, что если в шаблоне есть проблемы, об ошибке будет сообщено, что она идет из текста шаблона, а не из номера строки в файле perl (что я и хочу). Смотрите этот короткий пример:
use Template;
my $template = Template->new();
# Clearly a division by zero bug
$template->process(\"[% 1 / 0 %]")
or die $template->error();
В результате:
undef error - Illegal division by zero at input text line 1.
Что не очень полезно. Я хочу местоположение файла perl. Вместо этого я предлагаю:
my $template = Template->new();
$template->process(\"[% 1 / 0 %]")
or die $template->error() . ' ';
, который производит:
undef error - Illegal division by zero at input text line 1.
at test.pl line 11.
Таким образом, я также получаю номер строки в файле perl. Это выглядит немного уродливо, хотя. (Вы можете прекратить читать сейчас, если хотите ...)
Еще более правильный путь был бы:
use Template;
my $template = Template->new();
$template->process(\"[% 1 / 0 %]")
or do {
my $error = $template->error . '';
chomp $error;
die $error;
};
, который производит этот вывод:
undef error - Illegal division by zero at input text line 1. at t2.pl line 15.
Но это так многословно и там есть странный .
. Я фактически закончил тем, что создал:
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);
Чтобы я получил это:
undef error - Illegal division by zero at input text line 1 at test.pl line 30.
, а также это для примера OP:
file error - non-existent-file: not found at test.pl line 31.