NAME
Module::Installed - Check whether a module, or a file's list of includes are installed.
SYNOPSIS
use Module::Installed qw(module_installed includes_installed)
my $module = 'Mock::Sub';
# module_installed()
if (module_installed($module)) {
    require $module;
    $module->import;
    ...
}
else {
    warn "$module is not installed...";
}
# includes_installed()
my $includes = includes_installed('perl_file_with_includes.pl');
for my $inc_name (keys %$includes) {
    my $statement = $includes->{$inc_name}
        ? "is installed"
        : "isn't installed";
    print "$inc_name $statement\n";
}
DESCRIPTION
Verifies whether or not a module or a file's list of includes are installed.
FUNCTIONS
module_installed($name, $callback)
Checks whether a module is installed on your system.
Parameters:
$name
Mandatory, String: The name of the module to check against (eg: Mock::Sub).
Returns: True (1) if the module is found, and false (0) if not.
$callback
Optional, code reference: A callback that we'll execute on each call.
The callback will receive three parameters:
$module: The name of the module in question (eg: Mock::Sub).
$module_file: The file name of the module (can be used with require).
$installed: Bool indicating whether the module is installed or not.
Callback Example
my @modules = qw(Mock::Sub Devel::Trace);
for (@modules) {
    module_installed($_, \&cb);
}
sub cb {
    my ($module, $module_file, $installed) = @_;
    if ($installed) {
        require $module_file;
        $module->import;
    }
    else {
        warn "Module $module not installed... skipping";
    }
}
includes_installed($file, $callback)
This function reads in a Perl file, strips out all of its includes (use and require), and checks whether each one is installed on the system.
Note: This function requires PPI to be installed. If it is, we'll load it and proceed. If it isn't, we croak().
Parameters:
$file
Mandatory, String: The name of a Perl file.
$callback
Optional, code reference: A reference to a subroutine where you can perform actions on the modules you're checking. See "module_installed($name, $callback)" in callback.
Returns: A hash reference where the found included modules' name as the key, and for the value, true (1) if the module is installed and false (0) if not.
SEE ALSO
This module was pretty well copy/pasted from Module::Installed::Tiny, but without the significant dependency chain required by that distribution's test suite.
AUTHOR
Steve Bertrand <steveb@cpan.org>
COPYRIGHT AND LICENSE
This software is copyright (c) 2020 by Steve Bertrand
This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.