Re: custom vmethods

Tom Molesworth <tom-UE50auxAeIt4LjgWlUEQQwC/[email protected]> Wed, 24 Feb 2016 13:01:22 +0000
Newsgroups gmane.comp.lang.perl.modules.template-toolkit
Message-ID <[email protected]>
This is a multi-part message in MIME format.
--------------090807050809050501070203
Content-Type: text/plain; charset=windows-1252; format=flowed
Content-Transfer-Encoding: 7bit

Hi Dave,

On 24/02/16 12:44, Dave Howorth wrote:
> I'm trying to define a custom vmethod but not succeeding.
>
> I tried using the way described in the manual and also by calling 
> define_vmethod. Both ways appear to have set up methods in the 
> Template::Stash::SCALAR_OPS hashref but neither of them appears to 
> work, even with a very simple body. Any clues to what I'm doing wrong 
> gratefully received!
>
> In the perl:
>
> use Template::Stash;
> $Template::Stash::SCALAR_OPS->{uniprot_is_obsolete} =
>     sub {
>         return 42;
>     };
>
> sub forty_two { return 42; }
> Template::Stash->define_vmethod('scalar', 'forty_two', &forty_two);
>
> warn join ' ', keys %$Template::Stash::SCALAR_OPS, "\n";

Those look fine - are you sure that [% representative %] is defined as a 
scalar rather than a hashref/arrayref/object?

Attached example test script for the two methods works for me on 
Template 2.26.

cheers,

Tom


--------------090807050809050501070203
Content-Type: application/x-perl;
 name="tt2-vmethods.pl"
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment;
 filename="tt2-vmethods.pl"

#!/usr/bin/env perl 
use strict;
use warnings;
use Test::More;

use Template;
use Template::Stash;

my $tt = Template->new;
$Template::Stash::SCALAR_OPS->{ custom } = sub { 42 };
{
	$tt->process(\q{[% x.custom %]}, { x => 123 }, \my $out) or die $tt->error;
	is($out, '42', 'had 42 from SCALAR_OPS method');
}

Template::Stash->define_vmethod('scalar', 'forty_three', sub { 43 });
{
	$tt->process(\q{[% x.forty_three %]}, { x => 123 }, \my $out) or die $tt->error;
	is($out, '43', 'had 43 from define_vmethod');
}
done_testing;


--------------090807050809050501070203
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

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

--------------090807050809050501070203--