Ken Williams wrote:

On Dec 6, 2005, at 11:46 AM, John E. Malmberg wrote:

Ken Williams wrote:

I was thinking we could add those as TODO tests, but I was unaware of the problems with VAX legacy stuff.

There are some bugs that are in the legacy stuff that I am concerned if I change the behavior, I could break things.

One of the things that has to be removed though is any routine that is converting a file specification from VMS to UNIX format and then back to VMS format. That only works about 95% of the time.

The remaining 5% of the time, it is broken. I am still working on getting that fixed inside of vms.c.

I do not have examples handy of the broken behavior that I had discovered, which was sloppy of me, because it took some time in some cases to find out why a test was failing using ODS-5 disks.

Do you think the differences between the two platforms are significant enough to merit a separate File::Spec subclass for one of them?

The problem is that Perl on OpenVMS has been compensating for ODS-2 file handling by converting "./xxx.xxx.xxx" to "[]xxx.xxx_xxx" and when you are on an ODS-5 disk, it really should be "[]xxx^.xxx.xxx".

On 64 bit OpenVMS, for blead perl, if the logical name "DECC$EFS_CHARSET" is enabled, vmsify() and unixify() follow ODS-5 rules.

This logical name can be read through $ENV{}. But really a better control is needed.

These filenames will not show up on VAX at all. An issue though is what a UNIX system should do with the File/Spec/VMS routines.

One way or another though, if we're going to add '^' processing on VMS we'll need tests for it.

Canonpath() falls down hard with [.xxx^..yyy] which should pass through unchanged as the unix equivalent is "xxx./yyy/".

I could not figure out how to fix that, which is the most common case.

That causes a lot of things to fail that would work now.

Proper functioning of lib/File/Spec/VMS.pm and CWD.pm require that they know what mode that the OpenVMS CRTL is in for handling UNIX format file specifications and ODS-5 extended character sets.
That sounds a little scary. What's a CRTL?

The CRTL is the shared library that provides all the standard functions usually associated with C.

There are some feature controls that can be set to tell it to use newer functionality. The defaults are set so that older programs will not suddenly change behavior on a new file system.

Once the core modules in Perl where needed fully understand how to interpret the feature controls, many Perl programs that are written for UNIX only will be able to run on OpenVMS with out changes.

-John
[EMAIL PROTECTED]
Personal Opinion Only

Reply via email to