Well, I'm concerned about the "or some variation" statement. If you don't
know the format of the values you're in trouble and you need something to
handle it, i.e. catfile.

If you mean that you *do* know what the formats are, but that you have
control over them and can select the formats that work best, then OK,
Peter's solution should work fine. I would just point out that the F$PARSE
isn't really doing anything there so it can be removed. Also that the WRITE
can take a comma-separated list of values, so concatenating the values
together is unneccessary:
      $(NOECHO) WRITE TMP "read " +
f$parse((("$(PERL_ARCHLIB)"-"]")+".")+"auto"+("$(FULLEXT)"-"[")+".packlist",
,,,"SYNTAX_ONLY")
becomes:
      $(NOECHO) WRITE TMP "read " , "$(PERL_ARCHLIB)"-"]" , ".auto" ,
"$(FULLEXT)"-"[" , ".packlist"
which should be more efficient, and easier to read.

This of course will not work if the values aren't formatted as expected,
i.e. "<>" rather than "[]", missing or extra dots, missing colons, etc.
VMS doesn't have a built-in catfile, and F$PARSE won't correct for help with
the punctuation.
A routine I have to take a file specification and recursively translate any
logical names has a whole mess of loops to do things like replace "][" with
".".

I suggest sticking with catfile if you can't trust the values, or use the
above syntax if you can.


-----Original Message-----
From: Michael G Schwern [mailto:[EMAIL PROTECTED]]
Sent: Wednesday, March 27, 2002 8:08 AM
To: John Boucher
Cc: [EMAIL PROTECTED]; [EMAIL PROTECTED]
Subject: Re: VMS (non-perl) File::Spec->catfile equivalent?


On Wed, Mar 27, 2002 at 07:51:12AM -0800, John Boucher wrote:
> Well I'm a VMS guy, but I don't know what catfile does. I'll see what I
can
> find out about it, but I'd also like to know what you need it to do.

Given the following (or some variation on the following)

    volume:[some.dir]
    [.auto]
    [.ExtUtils.MakeMaker]
    .packlist

create a full path

    volume:[some.dir.auto.ExtUtils.MakeMaker].packlist

in less work than:

    perl "-MFile::Spec" -e "print File::Spec->catfile('volume:[some.dir]',
'[.auto]', '[.ExtUtils.MakeMaker]', '.packlist')"

using only *very* commonly available VMS tools.

Not only is the above ugly, but you have to run perl and load
File::Spec over and over again, which is expensive and slow on VMS.


-- 

Michael G. Schwern   <[EMAIL PROTECTED]>    http://www.pobox.com/~schwern/
Perl Quality Assurance      <[EMAIL PROTECTED]>         Kwalitee Is Job One
Cherry blossoms fall
I hurry to my final
boiling paste enema.
        -- mjd

Reply via email to