NAME
    Require::Hook::More - Load module like perl, with more options

VERSION
    This document describes version 0.001 of Require::Hook::More (from Perl
    distribution Require-Hook-More), released on 2020-01-04.

SYNOPSIS
     {
         local @INC = (Require::Hook::More->new(
             # skip_scalar    => 1,     # optional, default is 0
             # skip_scalarref => 1,     # optional, default is 0
             # skip_globref   => 1,     # optional, default is 0
             # skip_coderef   => 1,     # optional, default is 0
             # skip_object    => 1,     # optional, default is 0
             # prepend_code   => "use re::engine::PCRE2",   # optional, default is none
             # append_code    => "1;",                      # optional, default is none
         ), @INC);

         require Foo::Bar;
         # ...
     }

DESCRIPTION
    This require hook behaves like perl when loading modules from (the rest
    of the) @INC. Read "require" in perlfunc for more details. basically
    perl supports having scalar (directory names), or scalarref, or globref
    (filehandle), or coderef, or objects (blessed refs) in @INC.

    Additionally, this require hook provides some more options like skipping
    some items in @INC, adding code before or after the module's source
    code. Planned features in the future: plugins (e.g. storage plugin like
    retrieving source code from database, git repository [e.g. some branch
    or older revision], or remote storage), code filtering or mangling,
    signature checking, other kind of code checking, retry/fallback
    mechanism when code fails to be compiled, etc.

METHODS
  new
    Usage:

     $hook = Require::Hook::More->new(%args);

    Constructor. Known arguments:

    *   debug => bool (default: 0)

        If set to 1, will print debugging messages.

    *   skip_scalar => bool (default: 0)

    *   skip_scalarref => bool (default: 0)

    *   skip_globref => bool (default: 0)

    *   skip_coderef => bool (default: 0)

    *   skip_object => bool (default: 0)

    *   append_code => str (default: undef)

        Code to be added at the beginning of module source code. Can be used
        for example to add pragma since the code will be executed in the
        same lexical scope as the module source code.

    *   prepend_code => str (default: undef)

        Code to be added at the end of module source code.

HOMEPAGE
    Please visit the project's homepage at
    <https://metacpan.org/release/Require-Hook-More>.

SOURCE
    Source repository is at
    <https://github.com/perlancar/perl-Require-Hook-More>.

BUGS
    Please report any bugs or feature requests on the bugtracker website
    <https://rt.cpan.org/Public/Dist/Display.html?Name=Require-Hook-More>

    When submitting a bug or request, please include a test-file or a patch
    to an existing test-file that illustrates the bug or desired feature.

SEE ALSO
    Actual implementation of getting module source code from @INC is
    provided by Module::Installed::Tiny.

    Other "Require::Hook::*".

AUTHOR
    perlancar <perlancar@cpan.org>

COPYRIGHT AND LICENSE
    This software is copyright (c) 2020 by perlancar@cpan.org.

    This is free software; you can redistribute it and/or modify it under
    the same terms as the Perl 5 programming language system itself.