diff options
author | Moritz Lenz <moritz@faui2k3.org> | 2011-04-29 19:44:52 +0200 |
---|---|---|
committer | Father Chrysostomos <sprout@cpan.org> | 2011-05-18 21:35:43 -0700 |
commit | ce6c0f31778913bcbf7ccd245ab390dddd8a1361 (patch) | |
tree | c1def5e0d75c0c7085457a82bec28b06cb554b83 /lib/FindBin.pm | |
parent | 15cf0830e4143a05328e27be76fb4144090ccbb4 (diff) | |
download | perl-ce6c0f31778913bcbf7ccd245ab390dddd8a1361.tar.gz |
Remove long-stading limitation from FindBin
The FindBin documentation states as a known bug that it will return
a wrong result if a script of the same name as the current one exists in
$PATH, and is executable.
This patch removes the functionality of searching through $PATH.
According to Graham Barr it was only necessary because the SysV shell on
Sun4OS4 was broken - a system where I can't imagine anybody wanting
(and successfully compiling) a modern perl.
On Linux this part wasn't necessary in the case of `perl -S scriptname',
tests on other platforms are very welcome.
As a side effect, this patch also removes some IO operations, speeding up
FindBin slightly.
This patch is based on discussions with Tina Müller.
Further "discussion": http://www.perlmonks.org/?node_id=41213
Diffstat (limited to 'lib/FindBin.pm')
-rw-r--r-- | lib/FindBin.pm | 41 |
1 files changed, 1 insertions, 40 deletions
diff --git a/lib/FindBin.pm b/lib/FindBin.pm index 892d6e5d93..cf6ecf2904 100644 --- a/lib/FindBin.pm +++ b/lib/FindBin.pm @@ -59,21 +59,6 @@ workaround was to force the C<BEGIN> block to be executed again: delete $INC{'FindBin.pm'}; require FindBin; -=head1 KNOWN BUGS - -If perl is invoked as - - perl filename - -and I<filename> does not have executable rights and a program called -I<filename> exists in the users C<$ENV{PATH}> which satisfies both B<-x> -and B<-T> then FindBin assumes that it was invoked via the -C<$ENV{PATH}>. - -Workaround is to invoke perl as - - perl ./filename - =head1 AUTHORS FindBin is supported as part of the core perl distribution. Please send bug @@ -103,7 +88,7 @@ use File::Spec; %EXPORT_TAGS = (ALL => [qw($Bin $Script $RealBin $RealScript $Dir $RealDir)]); @ISA = qw(Exporter); -$VERSION = "1.50"; +$VERSION = "1.51"; # needed for VMS-specific filename translation @@ -145,30 +130,6 @@ sub init } else { - 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); - - # $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; - last; - } - } - } - croak("Cannot find current script '$0'") unless(-f $script); # Ensure $script contains the complete path in case we C<chdir> |