On Apr 2, 2009, at 9:33 AM, John E. Malmberg wrote:

Michael G Schwern wrote:
John E. Malmberg wrote:
Are you going to have time to look at the patches that I submitted to
MakeMaker and Test::Simple?

These are to support VMS when the DECC$FILENAME_UNIX_REPORT and
DECC$EFS_CHARSET and related options are active.

These options make Perl on VMS look more like Unix, including returning filenames in Unix syntax. Path tools has already been updated to work
in this mode.
I had a look at this, and I can't apply it. It was bad enough having special case code for VMS, now there's three different styles of VMS to be considered.

I had a similar reaction when I first saw it, but no one has suggested -- much less implemented -- anything else that actually works. If you have a better solution, please speak up.

But this diff here illustrates the real problem:
- is( $mm->{INSTALLVENDORMAN1DIR}, File::Spec- >catdir('foo','bar'),
+    my $expect = File::Spec->catdir('foo','bar');
+    $expect = VMS::Filespec::vmspath($expect) if $Is_VMS;
+    is( $mm->{INSTALLVENDORMAN1DIR}, $expect,
'installvendorman1dir (in %Config) not modified' ); Now every call to File::Spec, which is supposed to generate a portable path, has to have extra code tacked onto the end to do more work. If that's
necessary then File::Spec::VMS should be doing it.

File::Spec::VMS traditionally has not generated a portable path.

It depends on whether portable means native to the platform you are running on or something generic that can work on any platform.

In conclusion, this should all be built into File::Spec::VMS.

That's logically impossible, for reasons that John explained. To simplify a bit, File::Spec can reasonably be made to know whether it's expected to return results in native format or Unix format. It cannot reasonably be made to know that it is being called from a spot in MakeMaker that must produce a native format filespec that will be seen by a native utility regardless of what mode Perl is in.

It is only a small set of Perl programs that have benefited from it converting some file specifications to VMS format. I have found more cases of programs that have required that VMS specific code be added to them to compensate for this conversion in one way or another than I have found programs actually expect it and need it to happen.

It is only the case where something is building a VMS specific Make script or building a DCL command file that a filename needs to specifically be converted to VMS path syntax.

That's probably 90% true now. It was closer to 0% true in the dawn of time, when File::Spec::VMS::catdir first returned a native format spec. There wasn't really any choice about that at the time. The CRTL did not understand Unix format filespecs and there were lots of other things it didn't do that had to be implemented via native services. There are more choices now, which does make things complicated.

________________________________________
Craig A. Berry
mailto:craigbe...@mac.com

"... getting out of a sonnet is much more
 difficult than getting in."
                 Brad Leithauser

Reply via email to