Craig A. Berry wrote:

On Dec 7, 2008, at 12:46 PM, John E. Malmberg wrote:

Point taken,

Attached is vms/ext/filespec.t that changes those tests to be passing.

The documentation for VMS::Filespec::pathify says, "the file type and version, if specified, must be .DIR;1. For compatibility with Unix usage, the type and version may also be omitted." The tests have enforced this behavior since before 5.004. You're proposing to change the behavior so that a file type that is not .DIR is no longer considered a file type at all and the dot would then be considered part of the filename rather than the start of the type field. That could easily break existing code and doesn't seem to me like the way to go.

This is for UNIX format file specifications, which normally should not have a .dir on them when they are directories.

The new behavior is not inconsistent with the existing documentation, except that the old routine does not work for EFS characters.

Now if the dot is escaped and is thus unambiguously just an actual dot rather than a directory or file type delimiter that's a different story. We should support and test for those cases, something like:

__path_^.actualdot pathify __path_.actualdot/

The '^' escape character is only present on VMS format file specifications. With out any directory delimiter characters present, pathify assumes that this is a UNIX directory.

With a Unix directory syntax if ".DIR" is not present, the behavior of pathify would normally to be just put a '/' on the specification. Removing the ".dir" is needed because it may be present.

The following demonstrates the existing behavior is inconsistent:

$ perl -v

This is perl, v5.10.0 built for VMS_AXP

$ perl -e "print VMS::Filespec::vmsify('foo/bar./')"
[.foo.bar_]
$

$ perl -e "print VMS::Filespec::vmspath('foo/bar.')"
$
[Nothing output]

Those two sample one liners should have produced the same output.

$ define decc$efs_charset ENABLE
$ perl -e "print VMS::Filespec::vmsify('foo/bar./')"
[.foo.bar^.]

$ perl -e "print VMS::Filespec::vmspath('foo/bar.')"
$
[Nothing output]

As should these two examples.

So while it is change in behavior, the older tested behavior appears to be incorrect as it will cause file specifications that are accepted in other routines to be rejected.

I do not think this would be noticed in existing programs other than the test routines because such file specifications are rare on a VMS system, and that if someone had encountered one of them, they would have had to modify their perl program to not use pathify, unixpath, or vmspath.

-John
[EMAIL PROTECTED]
Personal Opinion Only

Reply via email to