# from Christopher J. Madsen
# on Saturday 15 March 2008 17:55:

>$plugin->pre_METHOD($builder, $parameters, $context, $return)
>$plugin->post_METHOD($builder, $parameters, $context, $return)

>* To completely override a method, set $_[-1] to an appropriate value
>   and return 'done'.

I don't like this return-by-reference scheme.  Can we say that the 
$return is an object and use methods for that?

  return $return->done("foo");

Or perhaps the plugins could inherit from a base which defines done() 
and continue() or so.

  return $self->done("foo");

(For now, I'll pretend that done() sets a state in the object and 
returns its argument.)

Of course, return() doesn't carry a consistent meaning in Module::Build 
right now, so maybe that needs to be specified.  What meaning should 
return values have for plugins?

Also, note that die() is probably the best way to deal with an error 
condition.


The priority and ordering are a concern when any plugin can abort the 
action based on run order.  This seems like it provides a lot of room 
for subtle bugs.  How would a plugin declare that it is incompatible 
with another or otherwise avoid the silent error of "only one of my 
plugins ran"?


>* Is this generic enough to be implemented in a separate module and
>   re-used in other classes?

Possibly, but the "ACTION_" aspect and a few other things are going to 
be somewhat specific to Module::Build.  Perhaps building the 
special-case first would be the way to get a better look at what the 
general case would want.


So, do plugins only get hooks on "ACTION_*", or is everything hookable?  
I'm a little concerned about what overhead is being added when no hooks 
are defined (but I suppose we could redefine our method with a hooked 
wrapper when a hook request appears.)


The requirement of get_hooks() is nice from M::B's reduced coding point 
of view, but it requires the plugin author to repeat themselves.  The 
symbol-table grovelling seems warranted (even accounting for 
inheritance) given that it only has to be written once and saves the 
plugin author some wrote repetition.  Perhaps this is get_hooks() in a 
Module::Build::Plugins base class.

--Eric
-- 
"I've often gotten the feeling that the only people who have learned
from computer assisted instruction are the authors."
--Ben Schneiderman
---------------------------------------------------
    http://scratchcomputing.com
---------------------------------------------------

Reply via email to