如何在Perl的Template Toolkit中找到“模板进程失败:undef错误”?

时间:2010-05-04 15:03:21

标签: perl cgi template-toolkit

我已将Perl CGI应用程序从一个Web主机移动到另一个Web主机。一切都运行良好,除了模板Tookit,它给出了以下错误:

“模板进程失败:undef错误 - 这不应该发生在/usr/lib/perl5/5.8.8/CGI/Carp.pm第314行。”

模板在其他Web主机上正常运行。我在创建模板对象时设置了DEBUG_ALL标志,但它没有提供任何有关错误的附加信息,只是加载了调试输出。

我无法发布模板源,因为其中有许多客户端特定的东西。

我写了一个简单的测试模板,这很好用。只是想知道是否有人之前已经看过这个错误,或者对找到它的最快方法有任何想法。

编辑:这是加载和处理模板的代码片段。

my $vars     = {};
$vars->{page_url}         = $page_url;
$vars->{info}             = $info;
$vars->{is_valid}         = 0;
$vars->{invalid_input}    = 0;
$vars->{is_warnings}      = 0;
$vars->{is_invalid_price} = 0;
$vars->{output_from_proc} = $proc_output;
...

my $file = 'clientTemplate.html';

#create ref to hash
use Template::Constants qw( :debug );


my $template = Template->new(
{
    DEBUG => DEBUG_SERVICE | DEBUG_CONTEXT | DEBUG_PROVIDER | DEBUG_PLUGINS |   DEBUG_FILTERS | DEBUG_PARSER | DEBUG_DIRS,
    EVAL_PERL    => 1,
    INCLUDE_PATH => [
        '/home/perlstuff/templates',
    ],
}
);

$template->process( $file, $vars )
  || die "Template process failed: ", $template->error(), "\n";

1 个答案:

答案 0 :(得分:4)

您可以尝试使用Devel::SimpleTrace获取代码在遇到错误时所在位置的堆栈跟踪。也许这会给你一些关于发生了什么的更好的线索。