Tony Cook wrote: > On Thu, May 27, 2004 at 12:45:02AM -0700, Stas Bekman wrote: > >>So how do I check in C whether the passed variable (or a random sv) is >>undef or not if comparing to &PL_sv_undef doesn't work? am I missing some >>obvious RTFM section? I've read: 'perlguts:=head2 AVs, HVs and undefined >>values' >>but it doesn't seem to be related. There were many other references to >>undef in the perl manpages, but I didn't find anything useful. > > >>From perldoc perlguts: > > If you want to know if this variable (or any other SV) is > actually "defined", you can call: > > SvOK(SV*) > > I've always used this, but the documentation in perlapi: > > SvOK Returns a boolean indicating whether the value is > an SV. > > bool SvOK(SV* sv) > > doesn't really lead you to it. Why pp_defined doesn't use it then? But I guess both doc places could be fixed. Moreover the original problem came from the autogenerated xs => C process, for converting a standard char * argument: #line 451 "URI.c" char * RETVAL; dXSTARG; [...] if (items < 2) val = NULL; else { val = (char *)SvPV(ST(1), val_len); } not only it's messed up formatting-wise, it should probably have the SvOK in it and not issue: Use of uninitialized value in subroutine entry at or may be it's a goodness that it does it. I suppose in order to allow undefs to be passed as arguments, one has to change the prototype of the xs function to accept SV* instead of char* and do the conversion manually. If it's not a goodness I'd rather see it do: if (items < 2 || (items == 2 && !SvOK(ST(1)))) val = NULL; else { val = (char *)SvPV(ST(1), val_len); } (in my example it's the second argument that's char *, but can be undef as well, therefore it's 2 items and ST(1)), but that may cause segfaults when an author weren't expecting users to pass undefined value as a char * variable. -- __________________________________________________________________ Stas Bekman JAm_pH ------> Just Another mod_perl Hacker http://stason.org/ mod_perl Guide ---> http://perl.apache.org mailto:stas@stason.org http://use.perl.org http://apacheweek.com http://modperlbook.org http://apache.org http://ticketmaster.comThread Previous | Thread Next