This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
emit require module name err hint only when valid
authorDavid Mitchell <davem@iabyn.com>
Sun, 16 Apr 2017 08:50:04 +0000 (09:50 +0100)
committerDavid Mitchell <davem@iabyn.com>
Tue, 18 Apr 2017 11:58:32 +0000 (12:58 +0100)
commitd31614f579da61846a22a2eb69b1d0412c86d54f
tree2ffbe3601110e86146c1eef3c59cbf127767c2a4
parent4b62894a4418bf61f306acb452472eb9fe79974e
emit require module name err hint only when valid

RT #131098

The helpful "you may need to install" hint which 'require' sometimes
includes in its error message these days (split across multiple lines for
clarity):

    $ perl -e'require Foo::Bar'
    Can't locate Foo/Bar.pm in @INC
        (you may need to install the Foo::Bar module)
        (@INC contains: ... ) at ...

is a bit over-enthusiastic when the pathname hasn't actually been derived
from a module name:

    $ perl -e'require "Foo.+/%#Bar.pm"'
    Can't locate Foo.+%#Bar.pm in @INC
        (you may need to install the Foo.+::%#Bar module)
        (@INC contains: ... ) at ...

This commit changes things so that the hint message is only emitted if the
reverse-mapped module name is legal as a bareword:

    $ perl -e'require "Foo.+/%#Bar.pm"'
    Can't locate Foo.+%#Bar.pm in @INC
        (@INC contains: ... ) at ...
pp_ctl.c
t/op/require_errors.t