At 8:19 PM -0700 3/26/08, Hein, Nashua NH wrote:
>On Mar 26, 9:51 pm, [EMAIL PROTECTED] (Thomas Pfau) wrote:
> > I could use some advice on how to handle error returns.

Thanks for making the effort to thrash out the interface in public.

> > The translate routine wants to return a hash reference containing
>> information about the logical.  If the logical isn't defined or some
>> other error returns, I'm setting it up to return a scalar containing the
>> status code.  Does this sound usable?  Should it return undef on error
>> and provide another routine to get the status code?
>
>That does not sound reasonable to me.
>If something does not work, I expect UNDEF or FALSE. Preferably UNDEF.
>If it does, then I expect a TRUE return. Something useful prefered.
>IMHO It should preferably behave much like OPEN.
>
>Can you stick the real error/return code behind $! ?
>Something like the $lnm->error you show in teh example should work
>also.

I think I agree with Hein that no translation should give you undef
and errors should be handled via $!, which is really just C's errno
with sugar on top.  You should be able to do that from XS with
something as simple as:

SETERRNO(ENOENT, SS$_NOLOGNAM);
XS_RETURN_UNDEF;

As far as successful returns, you could have an optional second
argument specifying a particular item and return the value of that
item as a scalar, but if the second arg is absent return the hash
with all the values.  Just a thought (not necessarily fully baked).
Be sure to look at Dan Sugalski's various VMS::xxx modules -- I think
he has some interfaces like that.


-- 
________________________________________
Craig A. Berry
mailto:[EMAIL PROTECTED]

"... getting out of a sonnet is much more
 difficult than getting in."
                 Brad Leithauser

Reply via email to