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