This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
require die msg: only mention @INC if used
authorDavid Mitchell <davem@iabyn.com>
Thu, 13 Apr 2017 11:23:59 +0000 (12:23 +0100)
committerDavid Mitchell <davem@iabyn.com>
Tue, 18 Apr 2017 11:58:32 +0000 (12:58 +0100)
RT #131098

5.8.0 introduced a change which as an inadvertent side-effect caused
this @INC-related require croak message:

    Can't locate foo in @INC (@INC contains: ...) at ...

to be emitted even when foo is a non-searchable pathname (like /foo or
./foo) and @INC isn't used.

This commit reverts the error message in these cases to be the simple

    Can't locate foo at ...

pp_ctl.c
t/op/require_errors.t

index 072f529..69280e2 100644 (file)
--- a/pp_ctl.c
+++ b/pp_ctl.c
@@ -4096,7 +4096,7 @@ S_require_file(pTHX_ SV *sv)
                DIE(aTHX_ "Can't locate %s:   %s: %s",
                    name, tryname, Strerror(saved_errno));
            } else {
-               if (namesv) {                   /* did we lookup @INC? */
+               if (path_searchable) {          /* did we lookup @INC? */
                    AV * const ar = GvAVn(PL_incgv);
                    SSize_t i;
                    SV *const msg = newSVpvs_flags("", SVs_TEMP);
index ca1622a..14d93e2 100644 (file)
@@ -9,7 +9,7 @@ BEGIN {
 use strict;
 use warnings;
 
-plan(tests => 27);
+plan(tests => 28);
 
 my $nonfile = tempfile();
 
@@ -168,3 +168,12 @@ like $@, qr/^Missing or undefined argument to require /;
 
 eval { do "" };
 like $@, qr/^Missing or undefined argument to do /;
+
+# non-searchable pathnames shouldn't mention @INC in the error
+
+my $nonsearch = "./no_such_file.pm";
+
+eval "require \"$nonsearch\"";
+
+like $@, qr/^Can't locate \Q$nonsearch\E at/,
+        "correct error message for require $nonsearch";