... In the template something of the form
[% IF error %] <h3 class="errorwarning"> [% lang.maketext(error.msg, error.args) %] </h3> [% END %]
This works if there is only one argument involved. If there are two I get
ARRAY(0x8d84058) already forwarded to. The original error message was of the
form "[_1] is already forwarded to [_2]" ? Can anybody tell me what I am doing
wrong ?
IIRC, TT helpfully squishes lists returned from methods/subroutines into list references if there is more than one returned value. Here's an example:
---------- package MyFoo;
sub new { return bless( {}, $_[0] ) }sub mycall {
my ( $self, @args ) = @_;
return "Passed: " .join( ', ', @args );
}sub getarg { return ( 'single-arg' ) }sub getargs { return ( 'this', 'is', 'a list' ) }
package main;
use Template;
my $template = Template->new();
$template->process( \*DATA, { foo => MyFoo->new() } )
|| die "Cannot process: ", $template->error();__DATA__ First: [% foo.mycall( 'a' ) %] Second: [% foo.mycall( foo.getarg ) %] Third: [% foo.mycall( foo.getargs ) %] ----------
This will return
---------- First: Passed: a Second: Passed: single-arg Third: Passed: ARRAY(0x86623c) ----------
To get around it you should pass a wrapper routine to your template in place of the 'lang' variable. For instance:
----------
my %params = (
MSG => sub {
my ( $key, $args ) = @_;
my @msg_args = ( ref $args eq 'ARRAY' ) ? @{ $args } : ( $args );
return $lang->maketext( $key, @msg_args );
},
...
);
$template->process( 'foo.txt', \%params )
----------
Centralizing this is a piece of cake.
Good luck,
Chris
-- Chris Winters Creating enterprise-capable snack systems since 1988
_______________________________________________ templates mailing list [EMAIL PROTECTED] http://lists.template-toolkit.org/mailman/listinfo/templates
