[Replies set to vmsperl@perl.org, as it is the only list I am subscribed to] Michael G Schwern wrote:
On Tue, Mar 29, 2005 at 02:43:42PM -0500, [EMAIL PROTECTED] wrote:
But in any case the tests all pass on VMS with or without that patch in place.Now that's unexpected. VMS works but Solaris didn't.
Which makes this a point to bring up some VMSisms that some people including OpenVMS Perl programmers may not be aware of.
There are also some changes that I am currently testing on the side that will potentially affect any Perl module that has OpenVMS specific code in it. They can be turned on and off as needed, but I would like to be able to eventually pass the self tests supplied with Perl with these features set.
MM_UNIX is one of the ones potentially affected. I am not yet good enough at reading Perl scripts to tell.
Some background:
The behavior of the OpenVMS C runtime library is dependent on feature logicals which control how many things work.
But with these feature logicals set, which perl scripts can check through the ENV{} operator, the C RTL features of OpenVMS can change to behaving more like UNIX and less like traditional OpenVMS.
The way that Perl is currently implemented, changing these feature logicals from their default is almost certainly guaranteed to have bad results. This is because in many cases some of the C filename parsing is bypassed for the support of older versions of OpenVMS.
As part of what I am doing to implement Symbolic link support on OpenVMS, it requires that to use Symbolic links, the C feature logicals and VMS environment settings need to be honored by the PERL executable.
The plus side of this is that it will allow Perl on OpenVMS 8.2 (Alpha and I64), and to a lesser extent older versions of OpenVMS on Alpha to run many scripts that are expecting UNIX behavior that currently will not run.
Many of these scripts are used in the building of programs on UNIX, and having them work unmodified on OpenVMS would be goodness for all.
The unfortunate side effect is that when these features are set to a UNIX compatible mode, any perl scripts that are expecting traditional VMS behavior with out requesting a filename converted explicitly to VMS format on VMS may break.
I hope that you will pardon my lack of Perl Script programing experience on these explanations, and for brevity, I am simplifying things, but some of the things that are optional are:
1. Treat all filenames as UNIX syntax. No VMS file specifications are permitted.
2. Accept VMS or UNIX file specifications, but always report them as UNIX type.
With either the above two enabled, the ".dir" on OpenVMS directories vanishes from returned file specifications, which may be something that impacts MM_UNIX as noted above. Also unless a VMS specific conversion is requested, a returned file is likely to be in UNIX format and as noted below in the correct case, and also may include UNICODE or other characters that normally are not in a VMS file specification.
It certainly affects the standard tests that are supplied with Perl.
3. Case preserved filenames. Filenames will be created with the case that the application specified them in and reported that way. This requires that the files are on an ODS-5 file system or later.
This also affects the standard tests.
4. Case sensitive filenames. Unlike the others, this is not set by a feature logical, but a VMS environment setting. I noticed in Perl that it was able to inquire if a platform was case sensitive, and I changed my local copy of Perl to report the process setting that is currently in effect. I have not tested that mode yet. This also requires ODS-5 filesystem or later.
In my current development phase, these feature settings are only checked at the startup of perl, and changing the ENV{} after that point may have strange side effects.
There are some others, like the handling of umask() which can be predicted or affected by the ENV{} for that value.
Also for the OpenVMS C runtime to effectively work with Symbolic links, the option of 2 above needs to be set, and effectively at least the option of 3 above also.
I have also noticed that some Perl scripts are assuming that "/" is a directory separator for things like ENV{'HOME'} and 'PERL5DB'. When the mode 1 or 2 above is set, those will work on OpenVMS, where now they do not.
-John [EMAIL PROTECTED] Personal Opinion Only