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.