Those are interesting approaches to "extending" the functionality of the
Template Toolkit.  I like these examples in that they show a progressive
approach to extending TT2, and it really helps in selecting a more
optimal solution for a given problem.

I wonder how many Plugin solutions could be more effectively written
with one of these "non-Plugin" alternatives?

This should really be captured in the documentation or the Cookbook.


Quoting darren chamberlain ([EMAIL PROTECTED]):
> Lyle Brooks <[EMAIL PROTECTED]> said something to this effect on 02/05/2002:
> > This thread makes me wonder if there are "Best Practices"
> > guidelines for when and perhaps when not to create Plugin.
> 
> [-- snip --]
> 
> > Anyone want to share when a Plugin is either the "only" way or
> > the preferred way to go vs. using LOAD_PERL?
> 
> Personally, I prefer to use virtual methods, then sub refs passed
> to process, then a Plugin, then a filter, when I add
> functionality.
> 
> Whenever possible, I make simple operations that operate on a
> single variable into virtual methods:
> 
>   sub commify {
>       my $v = shift;
>       1 while $v =~ s/^([-+]?\d+)(\d{3})/$1,$2/;
>       $v;
>   }
> 
>   $Template::Stash::SCALAR_OPS->{'md5'} = \&Digest::MD5::md5_hex;
>   $Template::Stash::SCALAR_OPS->{'commify'} = \&commify;
> 
> With these, for example, you can do:
> 
>   The MD5 checksum of '[% foo %]' is [% foo.md5 %].
>   The commified version of '[% num %]' is [% num.commify %].
> 
> And, assuming foo is "foo" and "num" is 1234567, you get:
> 
>   The MD5 checksum of 'foo' is acbd18db4cc2f85cedef654fccc4a4d8.
>   The commified version of '1234567' is 1,234,567.
> 
> If you don't want to go this route, then another option looks
> like:
> 
>   my %params = (
>       'commify' => \&commify,
>       'md5' => \&Digest::MD5::md5_hex,
>   );
>   $tt->process($file, \%params);
> 
> In this case, use them as such:
> 
>   The MD5 checksum of '[% foo %]' is [% md5(foo) %].
>   The commified version of '[% num %]' is [% commify(num) %].
> 
> And you get results identical to those above.
> 
> Other good examples for virtual methods are uc, lc, and all those
> sorts of functions.
> 
> For things of this nature that operate on blocks, a Filter is the
> way to go.
> 
> I use Plugins when ever I need to do some translation between the
> module I am calling and the data available from the template.
> Plugins can also be used to save state when using subroutines
> from stateless modules (for example, saving the logs from
> Mail::Sendmail).  Finally, LOAD_PERL is only usful for OO
> modules.  If you have modules that export subroutines, LOAD_PERL
> doesn't help you.
> 
> Helpful?
> 
> (darren)
> 
> -- 
> The bad reputation UNIX has gotten is totally undeserved, laid on
> by people who don't understand, who have not gotten in there and
> tried anything.
>     -- Jim Joyce, owner of Jim Joyce's UNIX Bookstore
> 
> _______________________________________________
> templates mailing list
> [EMAIL PROTECTED]
> http://www.template-toolkit.org/mailman/listinfo/templates


Reply via email to