I have been working on trying to get the CPANPLUS tests to pass on VMS.
Right now 04_cpanplus-Module is failing for at least the following reasons:
rmtree() is broken on VMS as it can not handle a file named '.;'. This
is noticed because a bug somewhere else in it is creating that file.
I have a tentative patch for it that I do not have time to submit at the
moment. It involves special case deleting that file if it is found
right after it shows up from the readdir() command.
Then it exposed that rename() on VMS was broken for directories. I also
have a tentative patch for that.
Neither patch has been fully tested yet.
The next set of failures are a result of several problems:
The file:spec routines are basically broken on VMS when given UNIX
pathnames as input.
One of the problems with them is that several of them are unexpectedly
returning VMS format files, even though the documentation implies that
they should not be. Unfortunately fixing that is a problem as it
appears MakeMaker and other modules are dependent on this behavior,
usually in a VMS specific section.
Leaving it as is though is also a problem because unless the code
calling the File::Spec routines is special cased on VMS it will
typically break the perl script. So while this is fine for modules that
have previously been debugged for VMS, it still is basically broken
behavior.
It was also noticed on a previous thread about Archive::Extract that on
Microsoft windows, one of the File::Spec routines was also returning an
incorrect result by unexpectedly translating one of the returned
components into a native path when given a UNIX input. They are also
returning incorrect results on VMS, which results in another set of
special case conditions, the very thing that they are supposed to be
preventing.
The other problem is that on VMS the File::Spec routines are simply
returning wrong results when given a number of UNIX format pathnames.
Module Extract is producing a sample of this when untaring the file for
test 54 of the above.
One issue is that the VMS specific File::Spec routines should never be
calling vmsify() or unixify(). These routines are not reversible, even
if they make some cases of parsing more convenient, there are a number
of VMS path specifications that can not make the round trip intact.
VMS has a mode (and has had it for a long time) where it will cause
programs written in C to only see UNIX file specifications. Currently
many portions of Perl are failing in this mode, most often because
File::Spec is unexpectedly converting the file specification back to VMS.
The next issue that comes up is that there is a path specification in
the tar archive for the test that has multiple dots in it. Currently
the File::Spec routines can not deal with that, as they are using an
obsolete parsing algorithm.
This is also a problem on VAX which can not handle the resulting directory.
What is needed is a routine or regex that converts such a path name to a
format acceptable for VMS ODS-2 volumes, that is replacing the "."s with
an "_".
Some where along the line a similar routine will likely be needed to
covert things like foo.bar.xyz to foo_bar.xyz.
My current plan of attack is not to go after the swamp of changing
File::Spec now, but continue to add special cases to the routines
affected by it for VMS.
But eventually I will need to get all of these things fixed.
Any suggestions or help would be appreciated, particularly with
algorithms to handle the conversion of paths and filenames with multiple
dots (or other characters not in [A-Z][0-9][\-\_] in them.
-John
[EMAIL PROTECTED]
Personal Opinion Only