[Templates] using an object instead of a hashref in Template::process()
Nick Woolley
nickwoolley at yahoo.co.uk
Mon Oct 22 19:50:07 BST 2007
Hi,
(I strongly suspect this has been answered before, but I've looked and
not found it.)
I'm curious, given that TT can use objects within templates without any
problems, you'd think you could pass an object as the second parameter
to process():
my $tt = Template->new;
my $obj = MyClass->new; # implements the method ->message()
$tt->process(\"the message is: $message", $obj);
Ok, I know this doesn't work. I've had a brief look at the source of
Template::Stash and I can see why.
I know I could just pass the object as a value within a hashref. But
this is frustrating, since it forces me to add a redundant prefix to all
the variable names used in the template. Or I could unbless the object,
but that's assuming it is a hash-based object, and the values I want are
stored in the hash. And there are other hacks I could try, but they get
increasingly clumsy and long winded.
But it seems such an obvious thing to want, I wonder is there a clever
way around this? And before I spend any time trying, is there some
reason why Template::Stash couldn't just delegate appropriate uses of
->get and ->set to an object, or die on inappropriate ones?
Thanks,
N
More information about the templates
mailing list