List Info

Thread: M::B::base.pm needs to track File::Spec->case_tolerant




M::B::base.pm needs to track File::Spec->case_tolerant
user name
2007-09-24 00:24:51
I am still working out how to do the fix for this, but I
have 
runthrough.t failing only one test.

Part of the problem has turned out to be that base.pm is
using C<qr{}> 
to build patterns for finding files.

This causes a case sensitive search for files.

It is specifically searching for '.PL' files, and by
default, Perl on 
VMS returns all filenames in lower case, so this never
matches.

The regex needs to be set to case insensitive when 
File::Spec->case_tolerant is one.

It looks like there are several instances of this, but in
the other 
cases, the filename portions of the patterns are in lower
case.

I have not yet figured out how to make the regex
conditionally case 
insensitive, and if there are additional problems beyond
that.

-John
wb8tywqsl.net
Personal Opinion Only

Re: M::B::base.pm needs to track File::Spec->case_tolerant
user name
2007-09-24 04:21:50
John E. Malmberg wrote:
> I am still working out how to do the fix for this, but
I have
> runthrough.t failing only one test.
> 
> Part of the problem has turned out to be that base.pm
is using C<qr{}>
> to build patterns for finding files.
> 
> This causes a case sensitive search for files.
> 
> It is specifically searching for '.PL' files, and by
default, Perl on
> VMS returns all filenames in lower case, so this never
matches.
> 
> The regex needs to be set to case insensitive when
> File::Spec->case_tolerant is one.
> 
> It looks like there are several instances of this, but
in the other
> cases, the filename portions of the patterns are in
lower case.
> 
> I have not yet figured out how to make the regex
conditionally case
> insensitive, and if there are additional problems
beyond that.

How about:

sub _find_PL_regex {
    return File::Spec->case_tolerant ? qr{.PL$}i :
qr{.PL$};
}

FWIW  MakeMaker does it like this:

        } elsif ($name =~ /.PLz/) {
            ($pl_files{$name} = $name) =~ s/.PLz// ;
        } elsif (($Is_VMS || $Is_Dos) && $name =~
/[._]pl$/i) {
            # case-insensitive filesystem, one dot per name,
so foo.h.PL
            # under Unix appears as foo.h_pl under VMS or
fooh.pl on Dos
            local($/); open(PL,$name); my $txt = <PL>;
close PL;
            if ($txt =~ /Extracting S+ (with variable
substitutions/) {
                ($pl_files{$name} = $name) =~ s/[._]plz//i
;
            }
            else {
                $pm{$name} =
$self->catfile($self->,$name);
            }
        } elsif ($name =~ /.(p[ml]|pod)z/){
            $pm{$name} =
$self->catfile($self->,$name);
        }

Don't do that.


-- 
I have a date with some giant cartoon robots and booze.

[1-2]

about | contact  Other archives ( Real Estate discussion Medical topics )