Reverse Complement utility, Bio::Alg, return value problem

Steve A. Chervitz sac@genome.stanford.edu
Thu, 7 Aug 1997 16:22:17 -0700 (PDT)



> > So I would favor having "set" functions (any function which can 
> > modify the object's data) return a status indicator and (possibly) being 
> > able to generate an exception that can invalidate the object. The issue 
> > of how to deal with exceptions is a separate issue. I don't think I have 
> > the best solution yet.
> 
> What do you think about simply raising an exception (i.e., croak) if an
> invalid operation is attempted.  If the code "cares" about errors, then it
> can test for exceptions using eval. 
> 
> The advantage of this is that (1) people definitely find out when
> something has gone wrong (whereas they may ignore method return values)
> and (2) we could potentially return something more interesting from the
> set_foo() methods
> 
> The disadvantage is that exception handling in Perl is a bit yucky and
> thus requires more code.  Without that code, the programs might die with
> undesirable frequency.

Yes, it would be useful to be able to return more interesting things 
from set_foo() methods.

I like the eval-based scheme since it closer to classical exception 
handling than having the object trap its own errors internally. The 
problem with my internal exception method is that you have to do alot of 
polling on the objects to determine if anything went wrong. If you forget 
to check an object, the error goes unnoticed (unless you try to use the 
object later). This does allow the script to avoid dying and is fine if 
you can catch all the errors, but that is becomming increasingly 
difficult. By croaking, you ensure the error get recognized by some one 
regardless of how complex the system gets. This should lead to more 
robust code.

So I have been considering switching to an eval{} based system for 
exception handling, perhaps combining this with my object-based 
exception mechanism. This might make it easier to take advantage of new 
exception handling features as Perl matures.