Trim all trailing / from "." in @INC when filling %INC
authorRafael Garcia-Suarez <rgarciasuarez@gmail.com>
Thu, 25 Jun 2009 17:57:19 +0000 (19:57 +0200)
committerRafael Garcia-Suarez <rgarciasuarez@gmail.com>
Thu, 25 Jun 2009 17:57:19 +0000 (19:57 +0200)
This fixes bug #66942 : as a / was left in the directory name,
$INC{"Foo.pm"} for a file loaded from the current directory
was given the incorrect value "/Foo.pm".

pp_ctl.c
t/run/runenv.t

index a7f1b76..6bb5b40 100644 (file)
--- a/pp_ctl.c
+++ b/pp_ctl.c
@@ -3489,8 +3489,10 @@ PP(pp_require)
                    tryname = SvPVX_const(namesv);
                    tryrsfp = doopen_pm(tryname, SvCUR(namesv));
                    if (tryrsfp) {
-                       if (tryname[0] == '.' && tryname[1] == '/')
-                           tryname += 2;
+                       if (tryname[0] == '.' && tryname[1] == '/') {
+                           ++tryname;
+                           while (*++tryname == '/');
+                       }
                        break;
                    }
                    else if (errno == EMFILE)
index 03706ed..3628bd0 100644 (file)
@@ -15,7 +15,7 @@ BEGIN {
     require './test.pl'
 }
 
-plan tests => 76;
+plan tests => 78;
 
 my $STDOUT = tempfile();
 my $STDERR = tempfile();
@@ -147,6 +147,21 @@ try({PERL5OPT => '-Mstrict -Mwarnings'},
     "ok",
     "");
 
+open F, ">", "Oooof.pm" or die "Can't write Oooof.pm: $!";
+print F "package Oooof; 1;\n";
+close F;
+END { 1 while unlink "Oooof.pm" }
+
+try({PERL5OPT => '-I. -MOooof'}, 
+    ['-e', 'print "ok" if $INC{"Oooof.pm"} eq "Oooof.pm"'],
+    "ok",
+    "");
+
+try({PERL5OPT => '-I./ -MOooof'}, 
+    ['-e', 'print "ok" if $INC{"Oooof.pm"} eq "Oooof.pm"'],
+    "ok",
+    "");
+
 try({PERL5OPT => '-w -w'},
     ['-e', 'print $ENV{PERL5OPT}'],
     '-w -w',