I asked:
Dave> My problem is that some_method is dying but I don't get any diagnostic
Dave> output. It seems as though TT just swallows the message. I've tried

Randal L. Schwartz wrote:
or be sure you're looking at the errors coming out of ->process:

    eval {
      ...
      $tt->process(...)
        or die $tt->error;
      ...
    };
    if ($@) {
      if (UNIVERSAL::isa($@, "Template::Exception")) {
        ## error came from Template or below
        if ([EMAIL PROTECTED]>type eq "undef") { # yes, the letters u n d e f!
          die [EMAIL PROTECTED]>info; # the error from below Template (perl 
code plugins)
        } else {
          ## the error came from a Template step, do what you want
          die "$@"; # stringifies the Template error
        }
      } else {
        ## the error came from above Template (something else in the eval)
        die $@; # throw it again
      }
    }

Thanks for this code. I'm still having the problem so I've put together another small test case using your code. The three files are below. The test program processes a template which calls a Perl class that tries to execute a non-existent method. But the error message doesn't appear.


When the program is run, it prints 'success', despite having encountered a non-existent method call. If the eval is uncommented, it prints

Can't locate object method "no_such_number" via package "MyTest" (perhaps you forgot to load "MyTest"?) at MyTest.pm line 9.
miracle success


Cheers, Dave

test.pl
-------
#!/usr/bin/perl
use strict;
use warnings;

use Template;
use lib '.';

my $tt = Template->new();
eval {
$tt->process('test.tt') || die $tt->error();
};
if ($@) {
if (UNIVERSAL::isa($@, "Template::Exception")) {
## error came from Template or below
if ([EMAIL PROTECTED]>type eq "undef") { # yes, the letters u n d e f!
die [EMAIL PROTECTED]>info; # the error from below Template (perl code plugins)
} else {
## the error came from a Template step, do what you want
die "$@"; # stringifies the Template error
}
} else {
## the error came from above Template (something else in the eval)
die $@; # throw it again
}
}



test.tt ------- [% USE Test = Class('MyTest') ; Test.method() ; 'success' %]


MyTest.pm --------- package MyTest; use strict; use warnings;

sub method
{
 my $self = shift;
#eval{
 my $s = $self->no_such_number();
#};
print STDERR $@ if $@;
 return 'miracle ';
}

1;



_______________________________________________
templates mailing list
[email protected]
http://lists.template-toolkit.org/mailman/listinfo/templates

Reply via email to