Michael G Schwern wrote:

I presume you mean eliminate_macros and fixpath that exist in both
ExtUtils::MM_VMS and File::Spec::VMS?

Yes.

I believe they started life in MakeMaker and then when File::Spec was carved
out of MakeMaker they made the jump with them because catdir() and catfile()
calls them.  It makes no sense for the code to be in File::Spec, for starters
they're object methods (everything in File::Spec is a class method) and do
make macro expansion.  So I pulled them back into MakeMaker and deprecated
the File::Spec::VMS version.  This also means MakeMaker can fix bugs in them
without having to depend on a newer File::Spec.

Long story short:  MM_VMS' versions are the real ones.  File::Spec's are
vestigal.

Unfortunately my testing shows that the File::Spec's ones are used all the time, unless they are called by MakeMaker which overrides them, and they do make changes to the pathnames that they are processing that catdir() and catfile() seem to depend on.

The "self=>" parameter which I do not fully understand seems to control this.

And up to now, I have not needed to know the difference between a class and an object in Perl.

But it seems that the need for eliminate_macros would go completely away if Perl was setting the DCL symbols instead of the logical names, because then MMS/MMK would see them. And I think that it does not look hard to make that happen.

Someone for an unknown reason set up getenv() to read the logical name tables in addition to the DCL symbol table file a long time ago, and this is one of the consequences.

DCL symbols behave on VMS like Shell symbols on UNIX.

Logical names behave on VMS like symbolic links on UNIX.

So "make" type programs on VMS that are written to VMS conventions would not be looking in the logical name tables for shell symbols, and that is where Perl is currently putting them.

But it is possible that GNU make, not knowing about VMSism will use the CRTL getenv() to resolve the macros, and just pick them up from where ever they are.

DCL symbols do not get exported to BASH shell symbols, so they may (or may not) be visible to GNU make. That is something that I have to check.

-John
[EMAIL PROTECTED]
Personal Opinion Only

Reply via email to