I don't really know the answer to your question but it's probably lurking in
the following section of perl.h. It appears to be converting VMS condition
codes to some other (POSIX?) exit statuses. In pp_sys.c there is a call to
STATUS_NATIVE_SET with the return value of Perl_do_spawn(). What I find
particulary puzzling here is that after extracting the severity bits (0-2)
the result is shifted left by 8. How can the VMS severity bits have any
meaning when shoved up one byte?
#ifdef VMS
# define STATUS_NATIVE PL_statusvalue_vms
# define STATUS_NATIVE_EXPORT \
(((I32)PL_statusvalue_vms == -1 ? 44 : PL_statusvalue_vms) | (VMSISH_HUSHED ?
0x10000000 : 0))
# define STATUS_NATIVE_SET(n) \
STMT_START { \
PL_statusvalue_vms = (n); \
if ((I32)PL_statusvalue_vms == -1) \
PL_statusvalue = -1; \
else if (PL_statusvalue_vms & STS$M_SUCCESS) \
PL_statusvalue = 0; \
else if ((PL_statusvalue_vms & STS$M_SEVERITY) == 0) \
PL_statusvalue = 1 << 8; \
else \
PL_statusvalue = (PL_statusvalue_vms & STS$M_SEVERITY) << 8; \
} STMT_END
# define STATUS_POSIX PL_statusvalue
# ifdef VMSISH_STATUS
# define STATUS_CURRENT (VMSISH_STATUS ? STATUS_NATIVE : STATUS_POSIX)
# else
# define STATUS_CURRENT STATUS_POSIX
# endif
_______________________________________________
Craig A. Berry
mailto:[EMAIL PROTECTED]