[Replies set to vmsperl@xxxxxxxx, as it is the only list I am subscribed to]
Michael G Schwern wrote:
On Tue, Mar 29, 2005 at 02:43:42PM -0500, PPrymmer@xxxxxxxxxxx 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
wb8tyw@xxxxxxx
Personal Opinion Only
|