"Randy W. Sims" wrote: > > James Edward Gray II wrote: > > > Fact: This has nothing to do with ANY variables, it is the way warn() > > is designed. > > Trivia: > > Did you know that $! does NOT contain an error string. It contains the > error *number*. The only reason you see a error sting is that it has an > overloaded stringification operator that calls strerror() on the numeric > value that it contains.
Did you know that $! is one of those "magical" variables that contains both a number and a string at the same time! AMAZING BUT TRUE! Here is an exerpt from the perl source: case '!': #ifdef VMS sv_setnv(sv, (NV)((errno == EVMSERR) ? vaxc$errno : errno)); sv_setpv(sv, errno ? Strerror(errno) : ""); #else { int saveerrno = errno; sv_setnv(sv, (NV)errno); #ifdef OS2 if (errno == errno_isOS2 || errno == errno_isOS2_set) sv_setpv(sv, os2error(Perl_rc)); else #endif sv_setpv(sv, errno ? Strerror(errno) : ""); errno = saveerrno; } #endif SvNOK_on(sv); /* what a wonderful hack! */ break; Where you can see that sv_setpv() sets the string part of $! and sv_setnv() sets the numeric part. John -- use Perl; program fulfillment -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] <http://learn.perl.org/> <http://learn.perl.org/first-response>