X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FFindBin.pm;h=e218de986a353fcc9fe0bb37f390389d044eebbc;hb=aaf9c2b26697492a8234a7efe890beef8868ea9b;hp=353a904647ffbf2459696218f04b58a27b263d92;hpb=34da6cec5a776efea53d807532e089a20e26cba6;p=p5sagit%2Fp5-mst-13.2.git diff --git a/lib/FindBin.pm b/lib/FindBin.pm index 353a904..e218de9 100644 --- a/lib/FindBin.pm +++ b/lib/FindBin.pm @@ -104,7 +104,14 @@ use File::Spec; %EXPORT_TAGS = (ALL => [qw($Bin $Script $RealBin $RealScript $Dir $RealDir)]); @ISA = qw(Exporter); -$VERSION = "1.46"; +$VERSION = "1.49"; + + +# needed for VMS-specific filename translation +if( $^O eq 'VMS' ) { + require VMS::Filespec; + VMS::Filespec->import; +} sub cwd2 { my $cwd = getcwd(); @@ -124,6 +131,7 @@ sub init # perl invoked with -e or script is on C $Script = $RealScript = $0; $Bin = $RealBin = cwd2(); + $Bin = VMS::Filespec::unixify($Bin) if $^O eq 'VMS'; } else { @@ -131,7 +139,9 @@ sub init if ($^O eq 'VMS') { - ($Bin,$Script) = VMS::Filespec::rmsexpand($0) =~ /(.*\])(.*)/s; + ($Bin,$Script) = VMS::Filespec::rmsexpand($0) =~ /(.*[\]>\/]+)(.*)/s; + # C isn't going to work, so unixify first + ($Bin = VMS::Filespec::unixify($Bin)) =~ s/\/\z//; ($RealBin,$RealScript) = ($Bin,$Script); } else @@ -142,24 +152,19 @@ sub init { my $dir; foreach $dir (File::Spec->path) - { + { my $scr = File::Spec->catfile($dir, $script); - if(-r $scr && (!$dosish || -x _)) + + # $script can been found via PATH but perl could have + # been invoked as 'perl file'. Do a dumb check to see + # if $script is a perl program, if not then keep $script = $0 + # + # well we actually only check that it is an ASCII file + # we know its executable so it is probably a script + # of some sort. + if(-f $scr && -r _ && ($dosish || -x _) && -s _ && -T _) { $script = $scr; - - if (-f $0) - { - # $script has been found via PATH but perl could have - # been invoked as 'perl file'. Do a dumb check to see - # if $script is a perl program, if not then $script = $0 - # - # well we actually only check that it is an ASCII file - # we know its executable so it is probably a script - # of some sort. - - $script = $0 unless(-T $script); - } last; } } @@ -188,7 +193,11 @@ sub init } # Get absolute paths to directories - $Bin = abs_path($Bin) if($Bin); + if ($Bin) { + my $BinOld = $Bin; + $Bin = abs_path($Bin); + defined $Bin or $Bin = File::Spec->canonpath($BinOld); + } $RealBin = abs_path($RealBin) if($RealBin); } }