The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!perl

use perl5i::latest;
use Test::More;

note "Successful require"; {
    local $!;
    local $@ = "hubba bubba";

    is "Text::ParseWords"->require, "Text::ParseWords";
    ok !$!, "errno didn't leak out";
    is $@, "hubba bubba", '$@ not overwritten';

    ok $INC{"Text/ParseWords.pm"}, "require";
    ok !defined &shellwords,        "nothing imported";

    "Text::ParseWords"->require->import;
    ok defined &shellwords,         "  default import";
}


note "Module doesn't exist"; {
    local $!;
    local @INC = qw(no thing);
    ok !eval { "I::Sure::Dont::Exist"->require; };
    is $@,
      sprintf(qq[Can't locate %s in \@INC (\@INC contains: %s) at %s line %d.\n],
              "I/Sure/Dont/Exist.pm", "no thing", __FILE__, __LINE__-3);
    ok !$!, "errno didn't leak out";
}


note "Invalid module name"; {
    ok !eval { "/tmp::LOL::PWNED"->require };
    like $@, qr{^'/tmp::LOL::PWNED' is not a valid module name };
}


done_testing;