diff --git a/MANIFEST b/MANIFEST index 81261e1a5402..5ac7db8a748c 100644 --- a/MANIFEST +++ b/MANIFEST @@ -3163,6 +3163,7 @@ dist/base/t/fields.t See if fields work dist/base/t/fields-5_6_0.t See if fields work dist/base/t/fields-5_8_0.t See if fields work dist/base/t/fields-base.t See if fields work +dist/base/t/incdoc.t Test how base.pm handles '.' in @INC dist/base/t/isa.t See if base's behaviour doesn't change dist/base/t/lib/Broken.pm Test module for base.pm dist/base/t/lib/Dummy.pm Test module for base.pm diff --git a/dist/base/lib/base.pm b/dist/base/lib/base.pm index cfe53aea996c..1093eb6f4f88 100644 --- a/dist/base/lib/base.pm +++ b/dist/base/lib/base.pm @@ -97,9 +97,9 @@ sub import { { local $SIG{__DIE__}; my $fn = _module_to_filename($base); + my $localinc = $INC[-1] eq '.'; + local @INC = @INC[0..$#INC-1] if $localinc; eval { - local @INC = @INC; - pop @INC if $INC[-1] eq '.'; require $fn }; # Only ignore "Can't locate" errors from our eval require. @@ -115,11 +115,19 @@ sub import { unless (%{"$base\::"}) { require Carp; local $" = " "; - Carp::croak(< 2; + +if ($INC[-1] ne '.') { push @INC, '.' } + +my $inc = quotemeta "@INC[0..$#INC-1]"; + +eval { 'base'->import("foo") }; +like $@, qr/\@INC contains: $inc\).\)/, + 'Error does not list final dot in @INC (or mention use lib)'; +eval { 'base'->import('t::lib::Dummy') }; +like $@, qr<\@INC contains: $inc\).\n(?x: + ) If you mean to load t/lib/Dummy\.pm from the current >, + 'special cur dir message for existing files in . that are ignored';