This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
tweak 'do "%s" failed' message
authorDavid Mitchell <davem@iabyn.com>
Fri, 31 Mar 2017 08:13:33 +0000 (09:13 +0100)
committerDavid Mitchell <davem@iabyn.com>
Fri, 31 Mar 2017 08:13:33 +0000 (09:13 +0100)
The warning

    do "%s" failed, '.' is no longer in @INC

was added in  the previous devel release; this commit enhances it to say

    do "%s" failed, '.' is no longer in @INC; did you mean do "./%s"

and updates the relevant docs.

See http://nntp.perl.org/group/perl.perl5.porters/243788.

pod/perl52511delta.pod
pod/perldiag.pod
pod/perlfunc.pod
pp_ctl.c
t/lib/warnings/pp_ctl

index 5deac54..e758c01 100644 (file)
@@ -97,10 +97,11 @@ L<VMS::Stdio> has been upgraded from version 2.42 to 2.41.
 
 =item *
 
-Since C<.> is removed from C<@INC>, C<do> will now trigger a warning
-recommending on fixing the C<do> statement.
+Since C<.> is now removed from C<@INC> by default, C<do> will now trigger
+a warning recommending to fix the C<do> statement:
 
-L<do "%s" failed, '.' is no longer in @INC|perldiag/"do "%s" failed, '.' is no longer in @INC">
+L<do "%s" failed, '.' is no longer in @INC|perldiag/"do "%s" failed, '.'
+is no longer in @INC; did you mean do "./%s"?>
 
 =back
 
index 9a4cdf6..97399c7 100644 (file)
@@ -2061,13 +2061,13 @@ define a C<$VERSION>.
 (F) You cannot put a repeat count of any kind right after the '/' code.
 See L<perlfunc/pack>.
 
-=item do "%s" failed, '.' is no longer in @INC
+=item do "%s" failed, '.' is no longer in @INC; did you mean do "./%s"?
 
 (W deprecated) Previously C< do "somefile"; > would search the current
-directory for the specified file.  Since F<.> has been removed from
-C<@INC> by default this is no longer true.  To search the current
-directory (and only the current directory) you can write C< do
-"./somefile"; >.
+directory for the specified file.  Since perl v5.26.0, F<.> has been
+removed from C<@INC> by default, so this is no longer true.  To search the
+current directory (and only the current directory) you can write
+C< do "./somefile"; >.
 
 =item Don't know how to get file name
 
index ae97bce..357cd21 100644 (file)
@@ -1829,8 +1829,11 @@ L<C<%INC>|perlvar/%INC> if the file is found.  See L<perlvar/@INC>
 and L<perlvar/%INC> for these variables. In particular, note that
 whilst historically L<C<@INC>|perlvar/@INC> contained '.' (the
 current directory) making these two cases equivalent, that is no
-longer necessarily the case, as there is now a compile-time option
-to disable this behaviour.
+longer necessarily the case, as '.' is not included in C<@INC> by default
+in perl versions 5.26.0 onwards. Instead, perl will now warn:
+
+    do "stat.pl" failed, '.' is no longer in @INC;
+    did you mean do "./stat.pl"?
 
 If L<C<do>|/do EXPR> can read the file but cannot compile it, it
 returns L<C<undef>|/undef EXPR> and sets an error message in
index a126232..3ad4c65 100644 (file)
--- a/pp_ctl.c
+++ b/pp_ctl.c
@@ -4120,7 +4120,10 @@ S_require_file(pTHX_ SV *sv)
 
             RESTORE_ERRNO;
             if (do_warn) {
-                Perl_warner(aTHX_ packWARN(WARN_DEPRECATED), "do \"%s\" failed, '.' is no longer in @INC", name);
+                Perl_warner(aTHX_ packWARN(WARN_DEPRECATED),
+                "do \"%s\" failed, '.' is no longer in @INC; "
+                "did you mean do \"./%s\"?",
+                name, name);
             }
 #endif
             CLEAR_ERRSV();
index 27efbcb..37dd4f1 100644 (file)
@@ -263,4 +263,4 @@ do "dounknown";
 do "./dounknown";
 unlink "dounknown";
 EXPECT
-do "dounknown" failed, '.' is no longer in @INC at - line 3.
+do "dounknown" failed, '.' is no longer in @INC; did you mean do "./dounknown" at - line 3.