With 64 bit OpenVMS 7.2, The OpenVMS ODS-5 file system can support paths as long as 4096 characters long.

Perl on VMS is currently limited in most places to paths that are only 255 characters long.

I am looking at removing that restriction on 64 bit OpenVMS.

The issue that comes up is that while the file system can handle the longer pathnames, the DCL shell and some utilities / system calls can not. These utilities can generally handle relative file specifications that could expand to long pathnames, but not the longer pathnames directly.

This primarily affects scripts that invoke other programs either directly from Perl, or build scripts to be run by other programs like MakeMaker does.

For compatibility VMS has ways of expressing a long path as a short path. The VMS::Filespec::rmsexpand() function will do that automatically now if the resulting file specification is greater than 255 characters.

It is very unlikely that any of the Perl file parsing or unixify/vmsify routines would properly handle such shortened path names at this time.

In general, such shortened path names use a dev_t/ino_t type combination to access the file, so it is not possible to recover the original exact pathname before the path was shortened because there could be multiple links to the same file, and there also could have been logical names that were expanded.

As such, it is very unlikely but not impossible that there are existing Perl scripts that would break directly from adding better support of the longer path names.

What I am looking at doing is:

1. Having unixify() always produce a POSIX style path name even if it needs to expand a shortened VMS pathname.

2. Having vmsify() always produce a traditional VMS pathname, even if it needs to expand a shortened name.

3. For handling ODS-5 extended filenames, when translating from VMS to UNIX format, "concealed rooted" logical names will not be expanded for absolute specifications. Historically Perl has done with with UNIXIFY, and this causes a loss of information in some cases, and in the case of search lists can cause a program to do unexpectedly the wrong thing.

4. VMS::Filespec::rmsexpand() will continue to by default always output
a VMS file specification that will fit in 255 characters. An option may be added to expand to a larger path name.

As the longer path names do not work now, and the DCL shell and many utilities can not directly work with them, I do not see that there would be much impact to implementing the changes this way.

Perl programs that expect to run on OpenVMS VAX need to continue to be restricted to the ODS-2 limitations listed in perlport.pod.

-John
[EMAIL PROTECTED]
Personal Opinion Only

Reply via email to