[Bioperl-l] Auto-method caller proposal

Chris Fields cjfields at uiuc.edu
Thu Jan 4 12:08:59 EST 2007


On Jan 4, 2007, at 4:45 AM, Sendu Bala wrote:

> Chris Fields wrote:
>> ...
>> If the method exists in the dispatch_table hash then you could  
>> have more
>> complex subs; all others would be simple get/sets.
>
> I not sure that this makes much sense; if you need something fancier
> than a simple scalar get/setter then by all means instead of  
> writing it
> as a string and passing it to _set_from_args you should implement  
> it as
> an explicit method in the class. That would be far preferable - users
> can then see its POD and code in the online documentation.

The script/class POD would still describe the method w/o the actual  
code being present.  Just describing the methods as get/setters or  
whatever in POD should be enough.  It's already done for BioPerl  
classes inheriting defined methods from base or interface classes.

> The -create => 1 option is really only to take the tediousness out of
> writing a million simple scalar get/setters for run-wrappers or other
> modules with many (externally determined) attributes.

Not a big deal, really.  I think it's probably best to have  
_set_from_args() use simple get/setters as you now have it, and have  
a different RootI-based method capable of doing what I described if  
needed.

I agree there are other much more straightforward ways of doing this,  
but I'm thinking along the lines of added hooks for customization.   
The idea is one could add in customized code fairly easily using this  
(very useful, BTW) method, or a similar one.  For example, I could  
replace code defined in a dispatch table with my own on the fly by  
passing in new code as an hash ref:

# customized subs
my %subs = ( 'ids' =>
             '# modified id() for customized ID retrieval, not std  
get/set',
              'score'   =>
             '# modified score() code using myparam() and mydata()'
);

# customized user-params (get/sets)
my @params = (qw(myparam mydata));

# pass into similar method to _set_from_args()
# using parameters and hash/array refs

BTW, don't know if this is possible, but can you get around 'no  
strict "refs"' by building the sub code as a string and using an  
eval?  I did something like this in the EUtilities BEGIN block using  
heredoc, something picked up from Brian's Bio::DB::Query::GenBank.

chris


More information about the Bioperl-l mailing list