So - TT2 is plagued with the "all methods are called in scalar context" issue.  
There have been recent patches to "fix" this, and there was even a new plugin 
by Andy that provides for a scalar vmethod - though it requires a certain 
level of voodoo to make it possible.  The scalar vmethod is a neat hack - but 
it is also a little ambiguous as we already have an item vmethod.  Not only 
that but it is the only vmethod that alters the chain that follows it.

In TT3, the plan is to merge filters and vmethods in-as-much as it is 
possible.  Alloy already has done this.  The result is that | can be used 
anywhere that a . is currently used.  The only difference is that when a pipe 
is used only vmethods or filters are searched for - no methods or hash values 
are looked for.

Originally I was going to propose using | to mean to call the method in scalar 
context - but then that allows method names to clobber virtual methods.  I'd 
propose making ! or some other character fulfill the purpose.  Thinking about 
it I would use the Perl 5 method call operator "->".  Well - I started to 
implemented it and i ran into -> used as a POST_CHOMP at the end of the Mason 
tag.  So -> won't work.

So with further thought - I think the following should be used:

   [% foo.method(bar) %]  # normal smart
   [% foo.*method(bar) %] # same thing (mnemonic 0 or more)
   [% foo.?method(bar) %] # scalar context (mnemonic 0 or 1)
   [% foo.+method(bar) %] # full list context - always a list (mnemonic 1 or 
more)
   [% foo.!method(bar) %] # void context (this is optional)

I don't think that any real allowance needs to be made for top level 
functions.  Presumably - if you are able to pass in a code ref, you have a 
little more access to it and can easily do sub { scalar mycode(@_) } instead 
of \&mycode.

If a better proposal isn't furnished I will probably add this to 
Template::Alloy.  The scalar vmethod should already work if it follows the 
standard implementation of TT plugins.

Just wondering about the future.

Paul

_______________________________________________
templates mailing list
templates@template-toolkit.org
http://mail.template-toolkit.org/mailman/listinfo/templates

Reply via email to