Whew!  That's some impressive debugging...

Quoting Craig Barratt ([EMAIL PROTECTED]):
> > So, my system template looks like:
> > [%
> >     TRY;
> >         PROCESS "userTemplateNameWhichCanBeNotFound.tmpl";
> >     CATCH file;
> >         PROCESS "systemTemplateAlwaysFound.tmpl";
> >     END;
> > %]
> > 
> > So here, I try to process the template
> > "userTemplateNameWhichCanBeNotFound.tmpl", and if there is not such tmpl,
> > the "systemTemplateAlwaysFound.tmpl" is processed.
> > 
> > The previous template give me :
> > file error - userTemplateNameWhichCanBeNotFound.tmpl: not found at
> > /usr/lib/perl5/site_perl/5.6.0/Template/Context.pm line 499.
> > undef error - [Thu Aug  9 13:05:18 2001]  31602 null ERR: file error -
> > userTemplateNameWhichCanBeNotFound.tmpl: not found at
> > /usr/lib/perl5/site_perl/5.6.0/Template/Context.pm line 499.
> > seen on my browser and the same in the error log.FYI, I'm using perl 5.6.0 &
> > TTK 2.04 & Apache 1.30.20 & modperl 1.25.What did I miss ?How can I REALLY
> > catch the error ? Avoid the output to stderr ?Is it the correct way to do it
> > ?Any help are welcome.kktos
> 
> It appears you have come across a subtle problem involving perl 5.6.0,
> TT2 and CGI::carp.  TT2 exceptions (of any kind, including STOP) do not
> work with CGI::Carp if you are using perl 5.6.0 and CGI.pm >= 2.67 (this
> might be one of the issues in TT2's TODO).
> 
> The problem is that between version 2.66 and 2.67 of CGI.pm, CGI/Carp.pm
> changed the definition of "ineval" from:
> 
> - BEGIN {
> -   $] >= 5.005
> -     ? eval q#sub ineval { defined $^S ? $^S : _longmess() =~ /eval [\{\']/m }#
> -     : eval q#sub ineval { _longmess() =~ /eval [\{\']/m }#;
> -   $@ and die;
> - }
> 
> to:
> 
> + sub ineval { _longmess() =~ /eval [\{\']/m }
> 
> Additionally, in perl 5.6.0 the stack trace (from Carp::Heavy::longmess_heavy)
> used by CGI::Carp returns contains the string "require 0" instead of
> "eval { }" when there is a die() inside an eval{}.
> 
> So the ineval() sub in CGI/Carp.pm doesn't think it is inside an
> eval (since it no longer checks ^S) and the exception is not
> dispatched correctly.
> 
> Here's an example:
> 
>     use Carp;
>     eval { confess "oops" };
>     print $@;
> 
> On perl 5.6.0 this prints:
> 
>     oops at test line 4
>           require 0 called at q6 line 4
> 
> while on perl 5.6.1 this prints:
> 
>     oops at q6 line 4
>           eval {...} called at q6 line 4
> 
> Your problem is solved in perl 5.6.1.  Or here's a patch to CGI/Carp.pm
> that should fix the problem too:
> 
>     - sub ineval { _longmess() =~ /eval [\{\']/m }
>     + sub ineval { defined $^S ? $^S : _longmess() =~ /eval [\{\']/m }
> 
> I did exchange emails with Lincoln about this issue, but he wasn't
> inclined to change what is a pretty fragile part of the code.
> 
> Hmmm, I noticed Andy's fingerprints in Carp::Heavy; perhaps he can shed
> some light on this?
> 
> Craig
> 
> _______________________________________________
> templates mailing list
> [EMAIL PROTECTED]
> http://www.template-toolkit.org/mailman/listinfo/templates


Reply via email to