X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FFindBin.pm;h=8be9cb6b5af0659ab0bc41728de7e248e536199a;hb=fbeb8e69a2839da21922b2334a124af719d18406;hp=9e1c0a06bf2a1b183b94c47ce895930d7547e722;hpb=d250f4d150ac6fc8fb5868a361de45273a2d64b4;p=p5sagit%2Fp5-mst-13.2.git diff --git a/lib/FindBin.pm b/lib/FindBin.pm index 9e1c0a0..8be9cb6 100644 --- a/lib/FindBin.pm +++ b/lib/FindBin.pm @@ -39,9 +39,23 @@ directory. $RealBin - $Bin with all links resolved $RealScript - $Script with all links resolved +=head1 KNOWN ISSUES + +If there are two modules using C from different directories +under the same interpreter, this won't work. Since C uses +C block, it'll be executed only once, and only the first caller +will get it right. This is a problem under mod_perl and other persistent +Perl environments, where you shouldn't use this module. Which also means +that you should avoid using C in modules that you plan to put +on CPAN. The only way to make sure that C will work is to force +the C block to be executed again: + + delete $INC{'FindBin.pm'}; + require FindBin; + =head1 KNOWN BUGS -if perl is invoked as +If perl is invoked as perl filename @@ -82,7 +96,7 @@ use File::Spec; %EXPORT_TAGS = (ALL => [qw($Bin $Script $RealBin $RealScript $Dir $RealDir)]); @ISA = qw(Exporter); -$VERSION = $VERSION = "1.42"; +$VERSION = "1.43"; BEGIN { @@ -102,20 +116,20 @@ BEGIN if ($^O eq 'VMS') { - ($Bin,$Script) = VMS::Filespec::rmsexpand($0) =~ /(.*\])(.*)/; + ($Bin,$Script) = VMS::Filespec::rmsexpand($0) =~ /(.*\])(.*)/s; ($RealBin,$RealScript) = ($Bin,$Script); } else { - my $IsWin32 = $^O eq 'MSWin32'; - unless(($script =~ m#/# || ($IsWin32 && $script =~ m#\\#)) + my $dosish = ($^O eq 'MSWin32' or $^O eq 'os2'); + unless(($script =~ m#/# || ($dosish && $script =~ m#\\#)) && -f $script) { my $dir; foreach $dir (File::Spec->path) { my $scr = File::Spec->catfile($dir, $script); - if(-r $scr && (!$IsWin32 || -x _)) + if(-r $scr && (!$dosish || -x _)) { $script = $scr;