On Sat, Jan 29, 2005 at 05:44:20PM -0600, Craig A. Berry wrote:
> That was my first theory as well, but that's not it. It's the result of
> the fact that I have a logical name "bin" defined, so it looks for
> bin/foo there rather than in the local relative path. Simply prepending
> ./ seems to do the trick:
> 
> $ show logical bin
>    "BIN" = "gnu:[bin]" (LNM$SYSTEM_TABLE)
> 
> $ perl -e "open(F,qq/<$ARGV[0]/) or die qq/$!/;" bin/chown
> $
> 
> succeeds because chown does actually exist in gnu:[bin]
> 
> $ perl -e "open(F,qq/<$ARGV[0]/) or die qq/$!/;" bin/instmodsh
> no such file or directory at -e line 1.
> %RMS-E-FNF, file not found
> 
> fails because instmodsh does not exist in gnu:[bin]
> 
> $ perl -e "open(F,qq/<$ARGV[0]/) or die qq/$!/;" ./bin/instmodsh
> $
> 
> succeeds because the additional syntax disambiguates it. We had to do
> something like this to File::Find some time ago.
> 
> Do you want a patch to cp_if_diff in Manifest.pm or do you already have
> an idea of how you want to handle this?

I'm of half a mind to just say that having a logical called 'bin' is
likely to break lots of unixy software if it makes "bin/foo" unsafe.
I'm sure there's lots of other places in MakeMaker which use "foo/bar" to
mean "./foo/bar" and something else will just break in the future.

In fact I'm a little surprised it hasn't.  Could you check if it applies
to C<open(F, qq/$ARGV[0]/)> as well?  cp_if_diff() is one of the few places
that uses < in open in MakeMaker.

Reply via email to